码迷,mamicode.com
首页 > 其他好文 > 详细

一起talk GCC吧(第三回:GCC编译)

时间:2015-06-22 16:24:09      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:gcc


各位看官们,大家好,上一回咱们说了如何使用GCC。这一回咱们说说如何使用GCC进行编译,闲话休提,

言归正转。让我们一起talk GCC吧!


看官们,GCC编译分为四个阶段:预处理,编译,汇编和链接。下面咱们说说每个阶段如何进行编译,还

是哪句话:说编译本质上就是说GCC的选项。因为不同的选项可以控制不同的编译。


预处理阶段:

该阶段使用的选项是E,会生成预处理后的产物。咱们举个例子:gcc -E filename.c这时不会生成

文件,而是把生成结果显示在执行命令的终端中。所以使用E选项时一定和o选项一起使用,这样

可以把预处理的产物写到o选项指定的产物中。例子:gcc -E filename.c -o f.i.我们可以使用文本编

辑器gedit或者VIM打开f.i文件查看。


编译阶段:

该阶段使用的选项是S,会生成编译后的产物,与就是汇编语言的源文件,文件后缀为.s。咱们举

个例子:gcc -S filename。或者gcc -S filename -o f.s.因为S选项可以默认生成filename.s文件,所

以是否使用选项o指定一个专门的文件,取决于用户自己,当然了,为了统一操作,建议大家还是

使用选项o指定一个文件。关于filename特别说明一下,    它即可以是C程序源文件,如filename.c。

也可以是预处理器生成的文件,如filename.i。不论使用哪种文件,都可以生成filename.s文件,而

且生成的文件完全一样。


汇编阶段:

该阶段使用的选项是c,会生成汇编后的产物,也就是没有链接的目标文件,文件后缀为.o。咱们举

个例子:gcc -c filename.gcc -c filename -o f.s.因为c选项可以默认生成filename.o文件,所以是否

使用选项o指定一个专门的文件,取决于用户自己,当然了,为了统一操作,建议大家还是使用选

项o指定一个文件。这点和选项S一样。在这里专门说下filename。它可以是C/C++语言的源文件,

也可以是编译器产生以.s为后缀的汇编源文件,甚至是使用预处理器生成的以后缀为i的文件都可以。


链接阶段:

该阶段不使用任何选项,会生成链接后的产物,也就是可执行的目标文件,文件后缀为.o。咱们举

个例子:gcc filename -o f.o.这里的filename可以用C/C++的源文件,或者是前面阶段生成的产物

来替换。比如.i,.s,.o文件。


下面我用一个表格来总结各个阶段使用的GCC选项,各个阶段可以处理的文件,我们叫它输入文件吧,以

及各个阶段的产物,我们叫它输出文件也可以。

阶段 选项  参数(输入文件类型)  
  产物(输出文件类型)
预处理  E .h,.c(c语言).C,.cc,.cxx(c++语言) .i(c语言),.ii(c++语言)
编译 
S .i,.h,.c(c语言).C,.cc,.cxx(c++语言) .s(生成汇编语言源文件)
汇编 c .i,.s,.h,.c(c语言).C,.cc,.cxx(c++语言)  .o(没有进行链接的目标文件,不能运行)
链接 .i,.s,.o,.h,.c(c语言).C,.cc,.cxx(c++语言) .o(有链接的目标文件,可以运行)

通过上面的表格,以及对各个选项的说明,我们可以发现GCC的各个阶段都是相互独立的,它既可以使用

前一个阶段的产物,也可以直接使用C/C++的源文件。各个阶段都是向后兼容,可以独立处理自己阶段中

的事情,也可以处理前面阶段没有处理的事情。


看官们,关于GCC的内容,今天咱们就说这些。欲知后事如何,且听下回分解!


一起talk GCC吧(第三回:GCC编译)

标签:gcc

原文地址:http://blog.csdn.net/talk_8/article/details/46593865

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!