操作系统-链接

编译系统

以下是一个 hello.c 程序:

 #include <stdio.h>
 ​
 int main()
 {
     printf("hello, world\n");
     return 0;
 }

在 Unix 系统上,由编译器把源文件转换为目标文件。

 gcc -o hello hello.c

这个过程大致如下:

  • 预处理阶段:处理以 # 开头的预处理命令;

  • 编译阶段:翻译成汇编文件;

  • 汇编阶段:将汇编文件翻译成可重定位目标文件;

  • 链接阶段:将可重定位目标文件和 printf.o 等单独预编译好的目标文件进行合并,得到最终的可执行目标文件。

静态链接

静态链接器以一组可重定位目标文件为输入,生成一个完全链接的可执行目标文件作为输出。链接器主要完成以下两个任务:

  • 符号解析:每个符号对应于一个函数、一个全局变量或一个静态变量,符号解析的目的是将每个符号引用与一个符号定义关联起来。

  • 重定位:链接器通过把每个符号定义与一个内存位置关联起来,然后修改所有对这些符号的引用,使得它们指向这个内存位置。

猜你喜欢

转载自blog.csdn.net/luolan_hust/article/details/113667598