C语言的本质(33)——GCC编译器入门

2023-03-15,,

GCC(GNU CompilerCollection,GNU编译器套装),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统采纳为标准的编译器,GCC同样适用于微软的Windows。GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。GCC是Linux平台下最常用的编译程序,是Linux平台编译器的事实标准。

程序的编译过程

对于GUN编译器来说,程序的编译要经历预处理、编译、汇编、连接四个阶段,如下图所示:

aaarticlea/png;base64,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" alt="" />

从功能上分,预处理、编译、汇编是三个不同的阶段,但GCC的实际操作上,它可以把这三个步骤合并为一个步骤来执行。下面我们以C语言为例来谈一下不同阶段的输入和输出情况。

在预处理阶段,输入的是C语言的源文件,通常为*.c。它们通常带有.h之类头文件的包含文件。这个阶段主要处理源文件中的#ifdef、 #include和#define命令。该阶段会生成一个中间文件*.i,但实际工作中通常不用专门生成这种文件,因为基本上用不到;若非要生成这种文件不可,可以利用下面的示例命令:

gcc -E test.c -o test.i

在编译阶段,输入的是中间文件*.i,编译后生成汇编语言文件*.s 。这个阶段对应的GCC命令如下所示:

GCC -S test.i -o test.s

在汇编阶段,将输入的汇编文件*.s转换成机器语言*.o。这个阶段对应的GCC命令如下所示:

GCC -c test.s -o test.o

最后,在连接阶段将输入的机器代码文件*.s(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。这一步骤,可以利用下面的示例命令完成:

GCC test.o -o test

GCC常用模式

这里介绍GCC追常用的两种模式:编译模式和编译连接模式。下面以一个例子来说明各种模式的使用方法。为简单起见,假设我们全部的源代码都在一个文件test.c中,要想把这个源文件直接编译成可执行程序,可以使用以下命令:

$ GCC -o test

这里test.c是源文件,生成的可执行代码存放在一个名为test 的文件中(该文件是机器代码并且可执行)。-o 是生成可执行文件的输出选项。如果我们只想让源文件生成目标文件(给文件虽然也是机器代码但不可执行),可以使用标记-c ,详细命令如下所示:

$ GCC -c test.c

默认情况下,生成的目标文件被命名为test.o,但我们也可以为输出文件指定名称,比如:

$ GCC -c test.c -o

上面这条命令将编译后的目标文件命名为mytest.o,而不是默认的test.o。

迄今为止,我们谈论的程序仅涉及到一个源文件;现实中,一个程序的源代码通常包含在多个源文件之中,这该怎么办?没关系,即使这样,用GCC处理起来也并不复杂,比如:

 $GCC -o test  first.c second.c third.c

该命令将同时编译三个源文件,即first.c、second.c和 third.c,然后将它们连接成一个可执行程序,名为test。

需要注意的是,要生成可执行程序时,一个程序无论有有一个源文件还是多个源文件,所有被编译和连接的源文件中必须有且仅有一个main函数,因为main函数是该程序的入口点(换句话说,当系统调用该程序时,首先将控制权授予程序的main函数)。但如果仅仅是把源文件编译成目标文件的时候,因为不会进行连接,所以main函数不是必需的。

gcc所遵循的部分约定规则:

.c为后缀的文件,C语言源代码文件;

.a为后缀的文件,是由目标文件构成的档案库文件;

.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过预处理;

.h为后缀的文件,是程序所包含的头文件;

.i 为后缀的文件,是C源代码文件且不应该对其执行预处理;

.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;

.m为后缀的文件,是Objective-C源代码文件;

.o为后缀的文件,是编译后的目标文件;

.s为后缀的文件,是汇编语言源代码文件;

.S为后缀的文件,是经过预编译的汇编语言源代码文件。

常用选项

许多情况下,头文件和源文件会单独存放在不同的目录中。例如,假设存放源文件的子目录名为./src,而包含文件则放在层次的其他目录下,如./inc。当我们在./src 目录下进行编译工作时,如何告诉GCC到哪里找头文件呢?方法如下:

$ gcc test.c –I../inc -o test

上面的命令告诉GCC包含文件存放在./inc 目录下,在当前目录的上一级。如果在编译时需要的包含文件存放在多个目录下,可以使用多个-I 来指定各个目录:

$ gcc test.c –I../inc –I../../inc2 -o test

这里指出了另一个包含子目录inc2,较之前目录它还要在再上两级才能找到。

另外,我们还可以在编译命令行中定义符号常量。为此,我们可以简单的在命令行中使用-D选项即可,如下例所示:

$ gcc -DTEST_CONFIGURATION test.c -o test

上面的命令与在源文件中加入下列命令是等效的:

#define TEST_CONFIGURATION

在编译命令行中定义符号常量的好处是,不必修改源文件就能改变由符号常量控制的行为。

在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。

GCC最基本的用法是∶gcc [options][filenames]

其中options就是编译器所需要的参数,filenames给出相关的文件名称。

-c,只编译,不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。

-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。

-O,对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、链接的速度就相应地要慢一些。

-O2,比-O更好的优化编译、链接,当然整个编译、链接过程会更慢。

-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶

#include <myinc.h>
#include “myinc.h”

其中,A类使用尖括号(< >),B类使用双引号(“”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹内搜索相应文件。

警告功能

当GCC在编译过程中检查出错误的话,它就会中止编译;但检测到警告时却能继续编译生成可执行程序,因为警告只是针对程序结构的诊断信息,它不能说明程序一定有错误,而是存在风险,或者可能存在错误。虽然GCC提供了非常丰富的警告,但前提是你已经启用了它们,否则它不会报告这些检测到的警告。

在众多的警告选项之中,最常用的就是-Wall选项。该选项能发现程序中一系列的常见错误警告,该选项用法举例如下:

$ gcc -Wall test.c -o test

C语言的本质(33)——GCC编译器入门的相关教程结束。

《C语言的本质(33)——GCC编译器入门.doc》

下载本文的Word格式文档,以方便收藏与打印。