程序运行的背后
程序在运行时经历了四个步骤,分别是预编译(Prepressing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。
预编译
预编译也称预处理,源代码文件(.c)和相关的头文件(.h)等被预编译器cpp预编译成一个 .i 文件。
编译
编译过程就是将预处理后的文件进行一系列词法分析、语法分析、词法分析及优化后产生相应的汇编代码文件(.s)。这个过程往往是整个程序构建的核心,也是最复杂的部分之一。
汇编
汇编器将汇编代码转换为计算机可执行的指令,每一条汇编语句几乎都对应着一条机器指令。整个过程相对简单,只是根据汇编指令和机器指令一一翻译。经过预编译、编译和汇编之后直接输出目标文件(object File)
链接
链接的本质就是把不同的目标文件接起来,组成一个整体,但是这些目标文件也一定要有固定的规则才行,目标文件的拼合实际上是目标文件之间对地址的引用,也就是函数和变量的地址的引用,比如目标文件(A)要调用目标文件(B)的函数,也就是说函数"Func"在目标文件(B)定义,目标文件(A)引用了目标文件(B)的函数"Func",这个概念同样适用于变量,函数和变量都要有自己独特的名字,才能避免链接过程中不同的函数与变量混淆,在链接过程中,变量与函数称为符号,函数名和变量名就是符号名。