ld:(.eh_frame)中的错误;不会创建.eh_frame_hdr表

时间:2013-10-23 17:49:32

标签: linux linker debian

我在C中创建一个非常简单的程序hello。当在exe文件中使用ld时返回

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

我没有在LD_LIBRAY_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版本是(Debian 4.7.2-5 )。

2 个答案:

答案 0 :(得分:7)

我相信您打算使用的实用程序是ldd(LDD),而不是ld。

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

答案 1 :(得分:4)

我认为你不明白ld的作用。 ld获取“目标文件”(已编译但未链接的代码,通常存储在.o文件中)和库(收集到单个.a或.so文件中的目标文件集),并将它们连接起来以生成可执行文件操作系统可以运行。

当您使用单个参数调用ld时,它期望该参数为目标文件。在您的情况下,您在“hello”和“/ bin / ls”上使用它,这是已经链接的可执行文件,从而产生(确实令人困惑的)错误消息。

我怀疑你的困惑源于这样一个事实:当你用gcc编译你的源代码时,它还会将它与标准库链接起来并产生一个可执行文件(比如“你好”),除非你明确告诉它不要。不需要单独的链接步骤。

供参考,以下是gcc manual pageld manual page