gcc是Linux下的C程序编译器,具有非常强大的程序编译功能。在Linux系统下,使用C语言编写的程序代码一般需要通过gcc来编译成可执行程序。
Linux系统下的gcc编译器(GNU C Compiler)是一个功能强大、性能优越的编译器。gcc支持多种平台的编译,是Linux系统下自由软件的代表作品。gcc本来只是C编译器,但是后来发展为可在多种硬体平台上编译出可执行程序的超级编译器。各种硬件平台对gcc的支持使得其执行效率与一般的编译器相比平均高 20%~30%。gcc编译器能将C、C++源程序、汇程语言和目标程序编译链接成可执行文件。通过支持make工具,gcc可以实施项目管理和批量编译。
经过多年的发展,gcc已经发生了很大的变化。gcc不仅能支持C语言,还支持Ada语言、C++语言、Java语言、Objective C语言、Pascal语言、COBOL语言等更多的语言集的编译。gcc几乎支持所有的硬件平台,使得gcc对于特定的平台可以编译出更高效的机器码。
gcc在编译一个程序时,一般需要完成预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)过程。使用gcc编译C程序时,这些过程是使用默认的设置自动完成的,但是用户可以对这些过程进行设置,控制这些操作的详细过程。
扩展名指的是文件名中最后一个点以后的部分。例如,下面是一个C程序源文件的扩展名。
这个文件的文件名是“4.1.c”,扩展名是“.c”。通常来说,源文件的扩展名标识源文件所使用的编程语言。例如,C程序源文件的扩展名一般是“.c”。对编译器来说,扩展名控制着默认语言的设置。在默认情况下,gcc通过文件扩展名来区分源文件的语言类型,然后根据这种语言类型进行不同的编译。gcc对源文件的扩展名约定如下所示。
.c为扩展名的文件,为C语言源代码文件。
.a为扩展名的文件,是由目标文件构成的库文件。
.C、.cc或.cpp为扩展名的文件,标识为C++源代码文件。
.h为扩展名的文件,说明文件是程序所包含的头文件。
.i为扩展名的文件,标识文件是已经预处理过的C源代码文件,一般为中间代码文件。
.ii为扩展名的文件,是已经预处理过的C++源代码文件,也是中间代码文件。
.o为扩展名的文件,是编译后的目标文件,源文件生成的中间目标文件。
.s为扩展名的文件,是汇编语言源代码文件。
.S为扩展名的文件,是经过预编译的汇编语言源代码文件。
.o为扩展名的文件,是编译以后的程序目标文件(Object file),目标文件经过链接成为可执行文件。
此外,对于gcc编译器提供两种显式的编译命令,分别对应于编译C和C++源程序的编译命令。