【i.MX283A学习】gcc编译C语言过程

2019-07-13 05:30发布

参考教程《嵌入式Linux开发教程(上册)》 一个简单的HelloWorld的C程序用GCC编译,只需要
gcc hello.c -o hello
便可以得到一个执行文件hello.省略掉上面语句的后部分,直接
gcc hello.c
则生成一个文件名默认为a.out的可执行文件。我们看起来似乎很简单的一行命令,其实内部经历了一系列的处理,处理过程如下图所示: 这里写图片描述 这一系列过程就是预处理,编译,汇编,链接。 那么这一系列过程做了写什么呢?我们可以通过把gcc hello.c这一过程展开写细点,就能看出来。

预处理

C语言的预处理文件后缀为.i,需要加上预处理命令-E
gcc -E hello.c -o hello.i
查看.i文件,会发现有很多行,比如把头文件具体到了指定的位置,预处理的作用是对各种预处理命令进行处理,包括头文件包含,宏定义的扩展,条件编译的选择等。

编译

编译需要加上参数-S
gcc -S hello.i
生成hello.s文件,查看会发现里面全变成了汇编语言,编译的作用就是将得到的预处理文件“翻译转换”成汇编语言文件。

汇编

得到上述的汇编语言文件后,就可以加上参数-c编译得到机器码文件.o文件。
gcc -c hello.s

链接

对机器码文件进行最后一步连接后,程序才能最终可以运行。
gcc hello.o
上面的后缀名都是有讲究的,gcc中常用C/C++文件名后缀如下图: 这里写图片描述 其中也用到了一些gcc编译参数,gcc常见编译参数如下图所示: 这里写图片描述
这里写图片描述