编译链接分为四个过程 :预编译、编译、汇编、链接
预编译 : 操作命令: gcc -E main.c -o main.i
1.将所有的#define删除,并把所有的宏进行文本替换 。
2.处理所有的预编译指令,例如:#if,#eif,#else,#endif;
3.处理#include预编译指令,将包含的头文件插入到预编译指令的位置(注意:头文件的展开是递归展开)
4.删除所有的注释。
5.添加行号和文件标识。
6.保留所有的#pragma编译指令
最后由源文件“.cpp/.c”生成“.i”文件
编译: 操作命令: gcc -S main.i -o main.s
1.扫描代码进行词法分析,即将源代码文件的字符序列划分为一系列的记号。
2.进行语法分析,即将对产生的记号进行语法分析。
3.进行语义分析,即由语法阶段完成分析的并没有赋予表达式或者其他实际的意义。
4.源代码优化,目标代码生成,目标代码优化。
5.生成汇编代码。
6.汇总所有的符号。
最后由“.i”文件生成“.s”文件
汇编: 操作命令: gcc -c main.s -o main.o
1.根据汇编指令和特定平台,把汇编指令翻译成二进制形式。
最后由“.s”文件生成“.o”文件
链接:操作命令: gcc -o main main.o
1.合并各个段和符号表
2.进行符号解析
3.分配地址和空间
4.符号地址重定位
最后生成可执行文件。