我需要帮助!!我正在尝试构建一个独立的可执行文件,即没有任何动态链接。
我编写了一个小测试程序,为它生成了一个名为 test.o 的可重定位目标文件。当我尝试使用 GNU 链接器构建独立可执行文件时,出现以下错误:
$ld -static -o test test.o /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/libc.a /usr/lib/gcc/i486-linux-gnu/4.4/libgcc .a /usr/lib/gcc/i486-linux-gnu/4.4/libgcc_eh.a /usr/lib/gcc/i486-linux-gnu/4.4/libgcc_eh.a(unwind-dw2-fde-glibc.o):在函数_Unwind_Find_FDE':
(.text+0x190b): undefined reference to
dl_iterate_phdr'
如何解决未定义的符号 dl_iterate_phdr。该符号出现在哪个档案中?
谢谢!!!
编辑1:
以防万一我不是很清楚,我的动机是生成一个独立的可执行文件,即一个在加载到内存时完全准备好执行的可执行文件,即)所有符号解析和重定位都由程序链接器本身而不是动态链接器完成. 是否可以生成这样的可执行文件?
最后更新:
现在我让它直接使用以下命令来遵守 ld :
$ld -static -o 测试 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.4.3/crtbeginT.o /usr/lib/gcc/ i486-linux-gnu/4.4.3/crtend.o test.o --start-group /usr/lib/gcc/i486-linux-gnu/4.4.3/libgcc.a /usr/lib/gcc/i486- linux-gnu/4.4.3/libgcc_eh.a /usr/lib/libc.a --end-group
man ld 说 --start-group archives --endgroup 用于解析循环引用!!我还发现符号 dl_iterate_phdr 是在 libc.a 中定义的。
感谢你的帮助!!