问题描述
我编写了NASM(网络汇编程序)程序,由于某些原因,我需要使用一些用C编写的函数。因此,我尝试使用 ld 将已编译的C对象文件与已编译的Assembly对象链接> 链接编辑器。我是这样做的:
ld -m elf_x86_64 -lc --dynamic-linker=/lib64/ld-linux-x86-64.so.2 object_files -o program
。
在我选择必要的参数之前,它并不想链接和工作足够长的时间。现在,此参数集可以按预期工作。但是我不理解-lc
和--dynamic-linker=/lib64/ld-linux-x86-64.so.2
的含义。他们是做什么的?
解决方法
- -lc-链接c标准库
- -dynamic-linker = / lib64 / ld-linux-x86-64.so.2。 -设置程序加载器。 Linux ELF二进制文件为此提供了一个字段。
即使对于静态二进制文件,也需要后者,否则其他任何事情都会使加载程序感到困惑,并且它将无法执行。
man ld列出其参数。