编译过程

来源:互联网 发布:淘宝多少钱不计入销量 编辑:程序博客网 时间:2024/04/29 19:48

下面以hello.c源文件到hello可执行目标文件的编译过程来讲解在实际的计算机系统中怎样把一个编程语言转变成机器语言的。

gcc -o hello helo.c

预处理阶段

预处理器cpp
功能:主要是根据#字符命令,把引入的.h头文件直接复制到程序中,生成新的C程序。
输出:hello.c->hello.i(被修改的源程序,文本可读)。

编译阶段

编译器cc1
功能:将上面的.i源程序翻译成.s汇编语言程序,其中的每条语句都是标准的格式来描述低级机器语言指令。汇编语言为不同高级语言的不同编译器提供通用的输出语言,也就是对于同一类型的机器(intel、arm可能不同)上的不同语言的汇编指令是相同的(一样的汇编语言)。
输出:hello.i->hello.s(汇编语言程序,文本可读)。

汇编阶段

汇编器as
功能:将上面的.s文件翻译成机器语言指令,把这些指令打包成一种可重定位目标程序的格式,同时将结果保存在目标文件.o中。
输出:hello.s->hello.o(可重定位目标程序,二进制不可读)。

链接阶段

链接器ld*
功能:负责把使用到的所有的.o文件合并在一起(尤其是标准库的一些.o文件),生成可执行目标文件,这个文件可以被加载到内存里面,有系统执行。
输出:hello.o->hello(可执行目标文件,二进制不可读)。

示例

这样整个程序的声明周期就完成了。
代码如下:
code
下面是上面代码的编译过程:
process

0 0
原创粉丝点击