Linking
Example C Program
Static Linking
Why Linkers?
那么我们为什么这样做的,为什么允许这种所谓的分离编译,为什么不喜欢一个包含所有代码的大文件。
Reason 1: Modularity模块化
- 允许将代码分解成更小的部分
- 创建共有函数的库,比如Math 库, 标准 C 库
Reason 2: Efficiency效率
- 分离编译,只改变一个源文件,编译后再连接整合;不需要重新编译其他文件
- 使用标准库中的所有功能,可以将它们放在一起
What Do Linkers Do?
在符号解析阶段,链接器将符号引用和符号定义相关联,这中间可能会有一些问题,比如在多个模块中,你可能会声明一个有相同名称的全局变量,链接器必须决定将其中的某个定义用于所有后续索引。