前言
我们知道,开发程序的基本流程是:设计-代码编写-编译-链接-执行
每一个步骤展开都是一个很大的课题,链接是一个被人忽略的课题,因为它并不是很复杂,相对于编译来说它还是比较简单的,但是并不代表它不重要。
现在编译链接的环节基本上由IDE帮助我们完成了,于是我们很少关注编译链接。虽然说不懂编译链接对开发程序并没有很大影响,但是如果要成为大牛,计算机底层的知识还是要掌握的。
编译的知识很多,不是几篇文章能说完的,推荐看《编译原理》。
这篇文章以及几篇相关的文章将参考《深入理解计算机系统》这本书,对链接作一些介绍。
链接的基本概念
链接(linking)就是将不同部分的代码和数据收集和组合成为一个单一文件的过程,这个文件可被加载或拷贝到内存并执行。
简单来说,就是把程序用到的所有源文件的目标文件合成一个可执行目标文件,是一个“多合一”的过程。
链接的执行时机包括:
- 编译时:源代码被翻译为机器码的时候。
- 加载时:程序被加载器加载到内存并执行的时候。
- 运行时:由应用程序执行。
在早期计算机系统中,链接是手动执行的。在现代计算机系统中,链接是由链接器自动执行的。