在多道程序的实现中,要想使源文件生成可执行文件通常需要两个步骤编译和链接,
其中编译是指将源文件编译为中间代码文件,在linux中为*.o文件,其实质就是由c或c++等高级语言生成汇编语言。
链接:由链接程序将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的载入模块。实质为将多个中间代码文件(包括静态库函数等)在统一的地址空间中生成可执行文件,
我们以编译c/c++为例,在windows中编译生成的为.obj文件,在linux/unix中生成.o文件,在编译的过程中主要是检测语法是否正确,变量和函数是否声明。当然对于extern声明的变量和函数(定义在别的编译文件中)会首先建立一个为解决符号表,同时函数中声明的全局变量也会放在一个解决符号表中。这两个符号表留给链接的时候去处理。每个源文件生成对应的一个.o文件。
当在链接的过程中时将所有的中间代码文件相互链接自己需要的函数和全局变量,这些函数可以来源于其它目标文件,也可以来自库文件。链接的过程实质就是为所有的中间代码文件进行统一的编址,例如在A源文件中调用了B文件中的方法,链接过程中就会找到B中方法的具体位置,并将该地址赋给A的调用函数,将A和B放在统一的虚拟地址空间中。