Linux下将源文件编译成目标文件的过程解析

 

一个.c源程序需要经过预处理器生成.i文件,再经过编译器生成.s文件,再经过汇编器生成可重定位目标文件.o文件,再与其他.o文件经过链接器生成最终的可执行目标程序。

预处理阶段

主要是处理源文件中以“#”开头的预编译指令。

删除#define并展开宏

处理所有条件预编译指令,如#if, #ifdef, #endif

插入头文件到“#include”处

删除所有注释

添加行号和文件名标识,以便编译时编译器产生调试用的行号信息

保留所有#pragma编译指令。

编译阶段

将预处理得到的预处理文件进行语法分析,词法分析,语义分析,优化后,生成汇编代码文件(汇编语言源程序)。

汇编阶段

利用汇编程序(汇编器)将汇编语言源程序转换成机器指令序列(机器语言程序)。

链接阶段

将多个可重定位的目标文件.o合并以生成可执行文件,其可以被加载到内存中,由系统执行。

posted @ 2018-03-02 15:47  tottot  阅读(571)  评论(0编辑  收藏  举报