链接

发布时间 2023-06-14 23:13:24作者: Yili188

参考:深入理解计算机原理

链接器使得分离编译(separate compilation)成为可能。

 1 /* main.c */
 2 void swap();
 3 
 4 int buf[2] = {1, 2};
 5 
 6 int main()
 7 {
 8     swap();
 9     return 0;
10 }
 1 /* swap.c */
 2 extern int buf[];
 3 
 4 int *bufp0 = &buf[0];
 5 int *bufp1;
 6 
 7 void swap()
 8 {
 9     int temp;
10     
11     bufp1 = &buf[1];
12     temp = *bufp0;
13     *bufp0 = *bufp1;
14     *bufp1 = temp;  
15 }

 

 

 

 

 

 

 

 

静态链接器以一组可重定位目标文件和命令行参数作为输入,生成一个完全链接的可以加载和运行的可执行目标文件作为输出。输入的可重定位目标文件由各种不同的代码和数据节(section)组成。指令在一个节中,初始化的全局变量在另一个节中,而未初始化的变量又在另外一个节中(字节块的集合)。

链接器需要完成符号解析(symbol resolution)和重定位(relocation)两个任务。

ELF(Executable and Linkable Format)

参考:

可重定位目标文件 (ELF) 的格式

elf 文件格式 - 可重定位目标文件

可执行目标文件和可重定位目标文件的3个区别

程序的链接过程

静态链接和动态链接以及静态库和动态库