我正在编写一个脚本,使得uClibc可在现有的glibc目标gcc/binutils工具链上使用。但是,我遇到的唯一问题是
原则上来说,我的工作已经完成了,但是在
我正在寻找一种使用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
符号表中。我正在寻找一种使用binutils(可能是
objcopy
?或者是一个链接脚本?)的方法,无论是在.so
文件上还是在libgcc_eh.a
中的原始.o
文件上,将这些符号取消隐藏。这是可能的吗?
libgcc_eh.a
中的目标文件应该可用于PIC共享库或PIE可执行文件,因为当未使用共享libgcc_s.so
时,它会被拉入其中,但我可能是错的。无论如何,在允许textrels的i386上至少可以工作。 - R.. GitHub STOP HELPING ICE