解剖GCC编译器原理
编译过程流程如图所示
1. 预处理过程:
预处理过程就是解析源程序过程中有文件包含,宏定义、条件编译,如#include,#define, #if等。把文件包含语句所指定的文件所包含进来,覆盖原来的#include语句,所有的宏定义都被展开。并且在预处理阶段将文件的注释给去除,把语句行号添加进来。
想通过预处理来查看预处理文件是否顺利展开可以使用如下指令:
gcc hello.c -o hello.i
2.编译过程
编译过程也称为汇编过程,这个过程是将c语言程序转译为汇编语言。编译过程包括词法和语法的分析,最终生成对应硬件平台的汇编语言,具体平台由具体平台的编译器来实现。
想获取到相应汇编代码可以通过如下指令来实现:
gcc hello.i -o hello.s -S
3.汇编
将汇编程序翻译成为可重定位文件,汇编指令跟处理器直接运行的二进制指令流之间基本是一一对应的关系。可以通过如下指令来生成:
gcc hello.s -o hello.o -c
4.链接
链接到语言库中相应的文件,可通过如下相应的指令实现:
gcc hello.o -o hello