我正在编写一个脚本,以使 uClibc 在现有的 glibc 目标 gcc/binutils 工具链上可用,我剩下的一个问题是pthread_cancel
需要dlopen
libgcc_s.so.1
. 主机 gcc 提供的版本链接到依赖于 glibc,所以我改为使用ld
's-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
符号表中。
我正在寻找一种在文件或原始文件objcopy
上使用 binutils(也许?或链接器脚本?)的方法来取消隐藏这些符号。这可能吗?.so
.o
libgcc_eh.a