我在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 )。
答案 0 :(得分:7)
我相信您打算使用的实用程序是ldd(LDD),而不是ld。
ldd将显示你的exe使用的所有共享链接库..或者至少在编译时链接它。
答案 1 :(得分:4)
我认为你不明白ld的作用。 ld获取“目标文件”(已编译但未链接的代码,通常存储在.o文件中)和库(收集到单个.a或.so文件中的目标文件集),并将它们连接起来以生成可执行文件操作系统可以运行。
当您使用单个参数调用ld时,它期望该参数为目标文件。在您的情况下,您在“hello”和“/ bin / ls”上使用它,这是已经链接的可执行文件,从而产生(确实令人困惑的)错误消息。
我怀疑你的困惑源于这样一个事实:当你用gcc编译你的源代码时,它还会将它与标准库链接起来并产生一个可执行文件(比如“你好”),除非你明确告诉它不要。不需要单独的链接步骤。
供参考,以下是gcc manual page和ld manual page。