Jac*_*ada 3 linux linker debian
我在C中编写一个非常简单的程序hello.当在exe文件中使用ld时返回此项
ld: error in hello(.eh_frame); no .eh_frame_hdr table will be created.
Run Code Online (Sandbox Code Playgroud)
我没有定义任何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
Run Code Online (Sandbox Code Playgroud)
发生了什么?我使用的是Debian,而我的GCC版本是(Debian 4.7.2-5).
我认为你不明白 ld 是做什么的。ld 获取“目标文件”(已编译但未链接的代码,通常存储在 .o 文件中)和库(收集到单个 .a 或 .so 文件中的目标文件集),并将它们连接起来以生成可执行文件操作系统可以运行。
当您使用单个参数调用 ld 时,它期望该参数是一个目标文件。在您的情况下,您在“hello”和“/bin/ls”上使用它,它们是已经链接的可执行文件,从而产生(公认的混乱)错误消息。
我怀疑您的困惑源于这样一个事实,即当您使用 gcc 编译源代码时,它还会将其与标准库链接并生成一个可执行文件(如“hello”),除非您明确告诉它不要这样做。不需要单独的连接步骤。