浅窥Linux编译过程

        我们所编写源代码成为一个可执行程序前会经历四个阶段:预处理->编译->汇编->链接;每个阶段,都会对源码进行不同的处理,我们来初步了解一下;

1、预处理阶段:
    读取源程序,对其中的伪指令(也就是以#号开头的指令)以及特殊符号进行处理;

其中伪指令一般包括四种:
1)宏定义指令;(#define)
2)条件编译指令;(#if..#endif)
2)头文件包含指令;(#include)

       预处理阶段所完成的工作是对源程序对这些伪指令进行替换,替换后生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。跟先前读取的源文件相比预处理后所生成的文件含义与之前一样,但是内容有所不同。

2、编译
    编译是指将高级语言所编写的程序转换成处理器所能解释的汇编语言这样一个过程,从实质上来说,编译其实是一个文本转换的过程。编译过程中所完成的工作主要包含为两个,一个是对C语言语法的解析,另一个是生成汇编码。

3、汇编
    汇编是将编译后生成的汇编码转换成目标系统的二进制代码,也就是机器所能读懂的“0101”机器代码。对于一款特定的处理器来说,它的汇编语言和二进制的机器代码是一一对应的。汇编过程输入的是汇编代码,这个汇编代码可能源于编译过程的输出,也可以是直接用汇编语言书写的程序。

4、链接
    链接是指将汇编后所生成的多段机器代码组合成一个可执行的程序。一般来说每一个源文件将生成的一个目标文件。连接器的作用就是将这些目标文件组合起来,组合的过程包括了代码段、数据段等部分合并。同时添加相应的文件头。

猜你喜欢

转载自blog.csdn.net/go_str/article/details/80090200