首页 > 学院 > 开发设计 > 正文

现代编译过程

2019-11-06 09:28:10
字体:
来源:转载
供稿:网友

现代编译过程

编译过程分为五步:

扫描解析文件预处理工作

处理宏定义,不管是由-D参数指定,还是在源码内部通过#define,或者使用了标准库,扩展库中的宏,都会替换为定义的值。 命令:cpp a.c>a.i 输出的a.i就是预处理过的文件,包含了完整的内容。 由此可以得出,宏不是运行时的定义内容,也不是编译时的内容,而是预处理阶段就完成的。

编译阶段:

将源代码(也就是预处理过的代码)编译为特定机器的汇编语言。 命令:gcc -S -Wall a.i 输出为特定的汇编内容。

汇编阶段:

将汇编源码汇编为机器码内容。 命令:as a.s -o a.o 此处如果有对外部的函数使用,则会预留未定义的地址,以供最后一步链接来使用。

链接阶段:

将链接对象文件(上编译汇编后的文件)链接为可执行文件,此过程比较复杂,需要链接很多外部的库文件,包括静态的,动态的库。 命令:ld -dynamic-linker .. .. .. 可以使用gcc a.o 来简化上一过程。 最后得出的是可执行文件。


上一篇:算法的时间复杂度

下一篇:test

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表