看完 这篇文章 之后,终于明白了编译到底怎么回事。 1对于同一个语句,有如下三种:高级语言、低级语言、机器语言的表示
我们都知道,机器是只能做数字计算的,能够让机器去运算的、数字的语言就是机器语言,除此之外的所有计算机语言都是非机器语言。这样的相对于机器语言的高级语言都需要一个转换,从高级、机器不可理解,转换为机器可理解的机器语言。这样的一个转换过程就叫做 由C转换为汇编语言这一过程是由 C和汇编语言转换为机器语言都是由编译器来完成的。 2这里面,C是可跨平台的,也可以说是与平台无关的。这里的平台有两种说法,一种是指计算机的 下面说一下将C语言编译为机器语言的整个过程: 首先,我们写出一份C程序代码,命名该代码为 然后我们运行编译器,对该源代码文件进行编译,在整个编译的过程中,编译器并不会执行该源代码,只是生成一份新的机器语言代码文件,如 3对于编译过程,里面还涉及到具体的一些可以说的细节步骤。 在 预编译hello.c文件: 执行成功后就会生成一个新的
纯粹的进行编译: 把.i文件写为hello.c也行,就是跳过手动预编译,直接完成预编译和编译两个过程。这时会得到一个hello.s文件,打开看一下,里面是编译好的使用于当前体系结构的汇编代码。 把汇编代码进行汇编可执行: 把.s文件换成.c也行,就是自动完成预编译、编译和汇编三个过程。现在得到一个hello.o文件,这是一个二进制文件,但不是最后的可执行二进制文件,因为它还缺少最后一步连接处理。 最后对.o文件进行连接,我们这里就一个.o文件所以简单,经常是需要有多个.o文件需要连接。连接执行: 如果把最后的.o文件写成.c,那就和最开始我们用hello.c编译时示范的那样了。实际上那样是完成了预编译、编译、汇编和连接一连串的过程。 想了解更多gcc的只是可以到GNU的网站上去看看。 BTW,gdb是常用的调式软件。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|