链接
链接详解
静态链接例子
对于两个.c文件,如何形成可执行的目标文件呢?
两个源代码分别经过预处理编译器,编译编译器,汇编编译器,生成了两个可重定向的目标文件,再经过链接器,链接成可执行目标文件。(在编译过程中需要指定两个.c文件)
链接器优势
- 模块化:程序是由许多小的源文件组成,而不是大的单一文件。并且能构建包含许多函数的库。
- 提高效率:节省时间:当修改源文件时,只需要重新编译那个修改的源文件,而不需要重新编译其他源文件。节省空间:公用的函数压缩成库,函数调用库时,只需要加载库中的某一些函数。
链接器的工作步骤
- 符号解析(简单解析)
- 程序能够定义和引用符号(全局变量或者函数)
- 这些符号(全局变量/函数)的定义在目标文件(.o)中以符号表的形式保存着,每一个符号对应着名称,大小,符号位置(以structs形式)
- 在符号解析阶段,链接器将每一个符号引用和其定义(名称,大小,符号位置)一一对应。
- 重定位阶段
- 目的是将分开储存的数据和代码组合成单一区域
- 重定位:由符号的相对位置,找到其绝对位置
- 更新符号引用中的位置为它们的绝对位置??
一些定义
-
三种目标文件(object files)(模块)
- 重定向目标文件&