我正在编写一个脚本,使 uClibc 可用于现有的以 glibc 为目标的 gcc/binutils 工具链,而我留下的一个问题是 pthread_cancel
需要 dlopen
libgcc_s.so.1
。主机 gcc 提供的版本链接到依赖于 glibc,所以我改为使用 ld
的 -u
选项来提取所需的符号(及其依赖项) ) 从 libgcc_eh.a
替换 libgcc_s.so.1
:
gcc -specs uclibc.specs -Wl,-u,_Unwind_Resume -Wl,-u,__gcc_personality_v0 \
-Wl,-u,_Unwind_ForcedUnwind -Wl,-u,_Unwind_GetCFA -shared -o libgcc_s.so.1
原则上我会完成,但是 libgcc_eh.a
中的所有符号都将其可见性设置为隐藏,因此在输出 .so
文件中,它们都变成了本地,不要添加到 .dynsym
符号表。
我正在寻找一种在 .so
文件或原始 上使用 binutils(可能是
文件以取消隐藏这些符号。这可能吗?objcopy
?或链接描述文件?)的方法。 o libgcc_eh.a
中的
最佳答案
objcopy
似乎没有这个功能,但是你可以用 ELFkickers rebind
tool 来实现:
rebind --visibility default file.o SYMBOLS...
这必须在原始 .o 文件上完成。如果您尝试在 .so 上执行此操作,则为时已晚,因为隐藏的符号将从 .dynsym
部分中省略。
关于c - 有没有办法用 GNU binutils 取消隐藏隐藏的可见性符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377608/