一份代码的编译过程有四个阶段:预处理、编译、汇编、链接。这是将一份我们写好的代码通过编译器编译成可执行文件的过程,这几个过程的说明如下:
1)预处理
预处理就是将要包含(include)的文件插入原文件中、将宏定义(#define)展开、根据条件编译(#if...#endif)命令选择要使用的代码,最后将这些东西输出到一个 “.i” 文件中等待进一步处理。
在 C/C++源文件中,以 “#” 开头的命令被称为预处理命令,如包含命令 “#include”、宏定义命令 “#define”、条件编译命令 “#if”、“#ifdef” 等。
2)编译
编译就是把 C/C++代码(比如上述的“.i”文件) “翻译” 成汇编代码,最终输出 “.S” 文件。
3)汇编
汇编就是将汇编代码翻译成符合一定格式的机器代码,这个根据系统不同,目标文件的格式有所不同。比如在Linux 系统上一般为 ELF 目标文件。
经过汇编这个过程会生成 “.o” 文件。
4)链接
链接就是将上步生成的 “.o” 文件和系统库的文件、库文件链接起来,最终生成了可以在特定平台运行的可执行文件。
这四个过程的演示如下图: