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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/abclixu123/article/details/47381069

参考教程《嵌入式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常见编译参数如下图所示:

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/abclixu123/article/details/47381069
今日推荐