一起talk GCC吧(第三回: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选项,各个阶段可以处理的文件,我们叫它输入文件吧,以

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

阶段选项参数(输入文件类型) 产物(输出文件类型)

编译

汇编c .i,.s,.h,.c(c语言).C,.cc,.cxx(c++语言).o(没有进行链接的目标文件,不能运行)

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

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

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

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

以前我是个爱仰望天空的人,苍蓝的天空总是给我求生的勇气,

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

相关文章:

你感兴趣的文章:

标签云: