本文主要是介绍Linux下如何将源文件逐步编译成目标文件的过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
请讲一下linux如何源文件逐步编译成可执行文件。
解答
首先先上图对编译的整个过程有个感性的认识,然后再逐步分析各个过程。
以hello.c 程序为例
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
一个.c源程序需要经过预处理器生成.i文件,再经过编译器生成.s文件,再经过汇编器生成可重定位目标文件.o文件,再与其他.o文件经过链接器生成最终的可执行目标程序。
-
预处理阶段。主要是处理源文件中以“#”开头的预编译指令。
- 删除#define并展开宏
- 处理所有条件预编译指令,如#if, #ifdef, #endif
- 插入头文件到“#include”处
- 删除所有注释
- 添加行号和文件名标识,以便编译时编译器产生调试用的行号信息
- 保留所有#pragma编译指令。
- 编译阶段。将预处理得到的预处理文件进行语法分析,词法分析,语义分析,优化后,生成汇编代码文件(汇编语言源程序)。
- 汇编阶段。利用汇编程序(汇编器)将汇编语言源程序转换成机器指令序列(机器语言程序)。
- 链接阶段。将多个可重定位的目标文件.o合并以生成可执行文件,其可以被加载到内存中,由系统执行。
本文转自 http://blog.csdn.net/u013616945/article/details/77418365
这篇关于Linux下如何将源文件逐步编译成目标文件的过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!