计算机系统基础 -- 第四章 (程序的链接)
什么是程序的链接?
将 gcc 生成的若干个. 0 文件为后缀的, vc 输出为. obj 为后缀的可重定位目标文件组合起来, 生成一个可执行目标文件
程序链接的好处:
1, 模块化 (可分成不同模块全部编译成. o 文件后链接即可运行. 而不仅仅是只有一个. c 文件, 对于大工程来说清晰划分)
2, 效率高 (由于可以使多个文件同时编写, 多个模块同时修改, 因此这样提升了效率)
在链接先进行编译和汇编, 在第三章聊过
可执行文件与. o 文件的汇编差别在哪?
由于可执行文件是将可重定位二进制文件重新组合, 因此其自身的虚拟地址转化为了逻辑地址, 如下// test.c
intmain(inti,intj){
intx=i+j;
returnx;
}
// 使用 objdump -d test.o 反汇编出来的. o 文件
// test.o
Disassemblyofsection.text:
0000000000000000
:
0:55push%rbp
1:48 89 e5 mov %rsp,%rbp
4:89 7d ec mov %edi,-0x14(%rbp)
7:89 75 e8 mov %esi,-0x18(%rbp)
a:8b 55 ec mov -0x14(%rbp),%edx
d:8b 45 e8 mov -0x18(%rbp),%eax
10:01 d0 add %edx,%eax
12:89 45 fc mov %eax,-0x4(%rbp)
15:8b 45 fc mov -0x4(%rbp),%eax18:5dpop%rbp