我需要帮助!!我正在尝试构建一个独立的可执行文件,即没有任何动态链接。
我写了一个小测试程序,为它生成了一个名为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 。该符号存在于哪个存档中?
感谢!!!
EDIT1:
如果我不是很清楚,我的动机是生成一个独立的可执行文件,即一个可执行文件,当它被加载到内存时完全可以执行,即)所有符号解析和重定位由程序链接器本身完成动态链接器。是否可以生成这样的可执行文件?
最终更新:
现在我使用以下命令直接遵守ld:
$ ld -static -o test /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中定义。
谢谢大家的帮助!!
答案 0 :(得分:3)
当我尝试使用GNU链接器
构建独立可执行文件时
别。使用ld
链接任何用户空间程序通常都是一个错误。你的链接线肯定不正确。
使用编译器驱动程序为您完成繁重的工作。这应该有效:
gcc -static -o test test.o
我希望使用ld,因为我想构建一个独立的可执行文件
是什么让你相信GCC构建的可执行文件是 less 独立而不是ld-built?不管是什么,你都错了:gcc
只是用正确的参数调用ld
。
答案 1 :(得分:2)
如果您在定位android时遇到此错误,则需要链接libdl.so(-ldl)
答案 2 :(得分:0)
gcc -o main main.c -L。 -static-libgcc -Wl,-static -lhello -lc