对`dl_iterate_phdr'的未定义引用

时间:2013-01-14 18:13:57

标签: gcc linker ld

我需要帮助!!我正在尝试构建一个独立的可执行文件,即没有任何动态链接。

我写了一个小测试程序,为它生成了一个名为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中定义。

谢谢大家的帮助!!

3 个答案:

答案 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