参考:深入理解计算机原理
链接器使得分离编译(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)

参考: