当前位置:文档之家› 程序的编译过程

程序的编译过程

4.1.2 程序的编译过程
对于GUN编译器来说,程序的编译要经历预处理、编译、汇编、连接四个阶段,如下图4-1所示:
图4-1 预处理、编译、汇编、连接四个阶段
从功能上分,预处理、编译、汇编是三个不同的阶段,但GCC的实际操作上,它可以把这三个步骤合并为一个步骤来执行。

下面以一个简单的C语言为例来示例C语言程序的编译过程。

在预处理阶段,输入的是C语言的源文件,通常为*.c。

它们通常带有.h之类头文件的包含文件。

这个阶段主要处理源文件中的#ifdef、#include和#define命令。

该阶段会生成一个中间文件*.i,但实际工作中通常不用专门生成这种文件,若非要生成这种文件不可,可以利用下面的示例命令:
预处理完成后进行编译,将预处理后的文件转换成汇编语言。

在编译阶段输入的是中间文件*.i,编译后生成汇编语言文件*.s。

在编译过程中,GCC首先检查代码是否符合规范、是否有语法错误等,在检查无误后,把代码翻译成汇编语言。

所用命令如下:
在汇编阶段将输入的汇编文件*.s转换成机器语言*.o。

汇编就是将汇编指令变成二进制的机器代码,即生成后缀为.o的目标文件。

当程序由多个代码文件构成时,每个文件都要先完成汇编工作,生成.o目标文件后进入下一步链接工作。

目标文件在链接之前还不能执行。

链接是编译的最后一个阶段,将各个目标文件链接起来生成可执行程序。

在连接阶段将输入的机器代码文件*.s汇集成一个可执行的二进制代码文件。

GCC通过调用LD完成链接的。

当程序执行过程中调用某些外部函数,链接器需要找到这些函数的代码,把这些代码添加到可执行文件中。

相关主题