我正在制作一个脚本,使uClibc可用于现有的glibc目标gcc/binutils工具链,而我留下的一个问题是pthread_cancel
需要dlopen
libgcc_s.so.1
。与主机GCC提供的版本是与依赖于glibc的,所以我不使用ld
的-u
选项从libgcc_eh.a
在需要的符号(和它们的依赖)拉进行替换libgcc_s.so.1
:有没有办法使用GNU binutils取消隐藏隐藏可见性符号?
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
文件或原始.o
文件libgcc_eh.a
来取消隐藏这些符号寻找一种方式来使用的binutils(也许objcopy
?或者一个链接脚本?)。这可能吗?
想必在'libgcc_eh.a'目标文件应在PIC共享库或PIE可执行文件使用,因为它没有被使用的共享'libgcc_s.so'当被载入到他们,但我可能是错误的。无论如何,它至少在i386上允许textrels。 –
刚刚看到您的编辑。留下我的评论,因为我认为它解释了*为什么*代码被编译为PIC。 –