ld: 在 (.eh_frame) 中出现错误;将不会创建 .eh_frame_hdr 表

4

我用C语言编写了一个非常简单的程序hello。当我在exe文件中使用ld时,返回了以下内容:

ld: error in hello(.eh_frame); no .eh_frame_hdr table will be created.

我没有定义任何LD_LIBRARY_PATH或者/etc/ld.so.conf中的路径。我尝试使用ls命令并返回以下结果:

ld: error in /bin/ls(.eh_frame); no .eh_frame_hdr table will be created.
ld: warning: cannot find entry symbol _start; defaulting to 0000000000402920

发生了什么?我正在使用Debian操作系统,我的GCC版本是(Debian4.7.2-5)。


欢迎来到 SO。请编辑您的问题并使用代码(**{}**)按钮正确格式化代码。 - dic19
你把库名拼错了吗? - James A Mohler
不,我只是制作了“ld hello”和“ld /bin/ls”。 - Jacobo Geada
你为什么要直接使用ld呢?编译和链接C程序的正常方式应该是直接使用C编译器,例如“gcc hello.c -o hello”。 - nephtes
2个回答

8

我相信你想使用的实用工具是ldd(LDD),而不是ld。

ldd将显示您的exe使用的所有共享链接库,或者至少在编译时链接它们。


5
我认为你不理解ld的作用。ld接收“目标文件”(已编译但未链接的代码,通常存储在.o文件中)和库(将一组目标文件集合到单个.a或.so文件中),并将它们连接起来生成可执行文件,以便操作系统可以运行。
当您使用单个参数调用ld时,它期望该参数是一个目标文件。在您的情况下,您正在对已经链接的可执行文件“hello”和“/bin/ls”使用它,从而产生了(令人困惑的)错误消息。
我怀疑您的困惑源于使用gcc编译源代码时,它还会将其与标准库链接并生成可执行文件(例如“hello”),除非您明确告诉它不要这样做。不需要单独的链接步骤。
供参考,这里是gcc手册页ld手册页

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接