Linux 系统下 gcc 的使用说明
Linux 系统下的gcc (GNU C Compiler)是GNU 推出的功能强大、性能优越的多平台编辑器,是GNU的代表作之一。 gcc 可以在多种硬件平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%~30%。
GCC编译器能将C、C++语言源程序、 汇编程序编译、链接成可执行文件。 在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。
Gcc通过后缀来区别输入文件的类别:
1 .c为后缀的文件: C语言源代码文件
2 .a为后缀的文件: 是由目标文件构成的库文件
3 .C,.cc或.cxx为后缀的文件: 是C++源代码文件
4 .h为后缀的文件: 头文件
5 .i 为后缀的文件:是已经预处理过的C源代码文件
6 .ii为后缀的文件:是已经预处理过的C++源代码文件
7 .o为后缀的文件: 是编译后的目标文件
8 .s为后缀的文件: 是汇编语言源代码文件
9 .S为后缀的文件: 是经过预编译的汇编语言源代码文件。
使用GCC编译程序时,编译过程可以被细分为四个阶段:
1、预处理(Pre-Processing)
2、编译(Compiling)
3、汇编(Assembling)
4、链接(Linking)
以上为介绍GCC的一些基础概念,下来我们拿一事例进行详细的说明:
我们还是从经典的代码 hello.c 开始
原程序为:
#include <stdio.h>
int main(void)
{
printf (Hello world!\n);
return 0;
}
1.编译和运行这段程序:
# gcc hello.c
# ./a.out
输出:Hello world!
由此可知 gcc 的基本用法为:
gcc [options] [filenames]
options:编译器所需要的编译选项
filenames: 要编译的文件名。
上例中省去了options 项,经过编译输出 a.out 文件,说明 gcc 在编译一个代码时默认输出为:a.out 文件,但是当编译的代码比较多的时候,这种方法不容易区别。
2. -o output_filename:确定可执行文件的名称为output_filename。如果不给出这个选项, gcc就给出预设的可执行文件a.out。
# gcc hello.c -o hello
# ./hello
输出为:hello world!
由此可知输出的文件名字为:hello ,同时可以明白 “-o”指令是让
系统输出一个指定名称的可执行文件。
3. -c:只编译,不连接成为可执行文件,编译器只是由输入的.c等
源代码文件生成.o为后缀的目标文件。
# gcc -c hello.c
# 运行后生成 hello.o 目标文件
4. -g:产生调试工具(GNU的gdb)所必要的调试信息,要想对编译出
的程序进行调试,就必须加入这个选项。
# gcc -g hello.c -o hello
# gdb hello
此时生成的 hello 文件即包含调试所需的信息,通过 gdb 可以进行
像单片机中 KEIL 软件一样的调试代码,验证代码。
5. -O:(注意这里是零)对程序进行优化编译、链接,采用这个选
项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可
执行文件的执行效率可 以提高,但是,编译、连接的速度就相应地要
慢一些。
# gcc hello.c -o hello
# time ./hello
# gcc -0 hello.c -hello
# time ./hello
#gcc -02 hello.c -o hello
# time ./hello
由此可知,指令“-0”和“-02”为代码优化指令,可以减少编译的时间。
6. -Wall:生成所有警告信息
# gcc -Wall hello.c -o hello
运行后会把所有的警告信息列出。
7. -w:不生成任何警告信息
# gcc -w hello.c -o hello
运行后不显示任何的警告信息
8. -DMACRO: 定义 MACRO 宏,等效于在程序中用 #define MACRO
文章评论(0条评论)
登录后参与讨论