GCC编译器简介
在Linux环境开发应用程序时,绝大多数情况下都是使用C语言,因此,几乎每一位Linux程序员面临的首要问题都是如何灵魂应用C编译器,目前Linux下最常用的C语言编译器是gcc(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,能编译用C、C++和Object C等语言编写的程序。事实上,gcc可以编译如C\C++\Object\java\Fortran\Pascal等多种语言,而且Gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体型结构的硬件平台开发软件,因此尤其适合在嵌入式软件领域的开发比昂一,在使用GCC编译程序时,编译过程可以分为以下4个阶段:
- 预处理
- 编译
- 汇编
- 链接
Linux程序员可以根据自己的需要gcc在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。和其他常用编译器一样,gcc也提供了零活儿强大的代码优化功能,利用它可以生成执行效率更高的代码。
文件后缀名 | 文件类型约定 |
.c | C语言源代码文件 |
.a | 由目标文件构成的档案库文件 |
.C\.cc\.cxx | C++源代码文件 |
.h | 程序包好的头文件 |
.i | 经与处理过的C源代码文件 |
.ii | 经处理过的C++源代码文件 |
.m | Objective-源代码文件 |
.o | 编译后的目标文件 |
.s | 汇编意愿源代码文件 |
.S | 经过预编译的汇编语言源代码文件 |
gcc作为Linux下C\C++重要的编译环境,功能强大,编译选项繁多。为方便之后内容的介绍,这里就简单的罗列一下gcc的编译选项:
选项 | 含义描述 |
-o filename | 指定输出文件名,在编译为目标代码时,这一选项是必须的。如果filename没有指定,默认文件名为a.out |
-c | 只编译不连接,生成目标文件“.o” |
-S | 只编译不汇编,生成汇编代码 |
-E | 只进行预编译,不做其他处理 |
-g | 在生成的可执行程序中包含标准调试信息 |
-v | 打印编译器内部编译个过程的命令行信息和编译器的版本号 |
-w | 禁止所有的报警 |
-pedantic | 严格要求符合ANSI标准 |
-Wall | 在发生警告时取消编译操作,即将警告看做是错误 |
-static | 链接静态库 |
-library | 链接名为library的库文件 |