我正在编写一个脚本,以使 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.olibgcc_eh.a