编译过程主要分:预处理、编译+汇编、静态链接 这三个过程
1、预处理:
预处理过程主要处理那些源文件中的以“#”开始的预编译指令。包括#include,#define, #if等等
主要的处理规则如下:
2、编译+汇编
编译:
通过词法分析、语法分析、语义分析、源代码优化、类型检查等等,将源代码翻译成汇编代码。
汇编:
通过代码生成、目标代码优化等把汇编语言代码翻译成二进制机器码
编译+汇编示意图:

3、静态链接
前面的编译中,每个源代码模块是单独编译的,然而不同的模块之间不可避免地要相互引用变量或函数,这些变量或函数的地址只有在此阶段才能确定。链接过程就是把编译器生成的一个个目标文件链接成二进制可执行文件(.exe)
此阶段的链接是静态链接,运行期间的链接则是动态链接。
动态链接:静态链接期间不完成实际的链接操作,只保存函数的重定位信息,在运行期间才去找到动态库的函数符号进行重定位。
编译完成之后,运行:
“静态的程序”被载入内存,由 CPU 逐条语句执行,就形成了“动态的进程”。