我正在为大学课程学习使用NASM
汇编语言。 我想要用ld
链接C Runtime Library,但我似乎无法理解它。我使用的是安装了Linux Mint
的64位
计算机。
我感到困惑的原因是,据我所知,gcc
不是链接C运行时库,而是将需要的内容复制到程序中。但我可能是错的,请纠正我。
到目前为止,我所做的就是使用gcc
进行链接。即使对于像交换rax
和rbx
这样的小程序,它也会产生混乱的机器代码,我无法跟踪它,这对学习来说并不是很好。(请注意,程序正在运行。)
我不确定这是否相关,但这些是我正在使用的编译和链接命令:
# compilation
nasm -f elf64 swap.asm
# gcc
gcc -o swap swap.o
# ld, no c runtime
ld -s -o swap swap.o
提前感谢!
结论:
既然我已经得到了正确的答案,我想提出几个要点。像 Z boson 的回答那样(适用于64位系统),可以动态链接glibc
库。如果您想静态链接,请查看此链接(我从Z boson的回答中重新发布)。
这里有一篇文章,是Jester发布的,介绍了Linux中程序如何启动。
如果想了解gcc链接你的.o
文件的过程,请尝试使用以下命令:gcc -v -o swap swap.o
。注意,“v”代表“详细信息”。
感谢您的回答和有益的见解!讲话结束。
gcc -v
查看所需部分。你可能会对这篇关于程序启动的精彩文章感兴趣。 - Jestergcc -o swap swap.o
链接运行时库。而ld -o swap swap.o
则不会链接运行时库。链接过程包括将运行时库的相当大部分内容复制到可执行文件中。那么问题究竟出在哪里呢? - n. m.gcc -v -o swap swap.o
命令来查看 gcc 如何调用 ld。你需要做更多或更少相同的事情,所以你可以省去麻烦直接使用gcc。 - n. m.