GCC使用
gcc的文件类型
文件后缀名 | 文件类型约定 |
---|---|
.c | c语言源代码文件 |
.a | 由目标文件构成的档案库文件 |
.C/.cc/.cxx | c++源代码文件 |
.h | 程序所包含的头文件 |
.i | 经预处理过的源代码文件 |
.ii | 经预处理过的c++源代码文件 |
.m | Objective-C源代码文件 |
.o | 编译后的目标文件 |
.s | 汇编语言编写的源代码文件 |
.S | 经过预编译的汇编语言文件 |
gcc选项参数
选项 | 功能 |
---|---|
-o | 指定输出的文件名,在汇编为目标代码时,这选项不是必须的,如果文件名没有指定,那么默认文件名是a.out |
-c | 只汇编不链接,生成目标文件“.o” |
-S | 只编译不汇编,生成汇编代码文件“.s” |
-E | 只进行预处理,生成预处理后文件“.i” |
-g | 在生成可执行程序中包含标准调试信息 |
-v | 打印编译器内部编译过程的命令行信息和编译器的版本号 |
-w | 禁止所有警报 |
GCC编译过程
1、预处理
第一步就是预处理,在预处理阶段主要处理源文件中的#ifdef、#include和#define等处理命令。该阶段会生成一个中间文件*.i
gcc -E test.c -o test.i
2、编译
第二步是编译阶段,在编译阶段gcc把预处理后的结果编译成汇编或者目标模块。输入的是中间文件*.i,编译后生成汇编语言文件 .s
gcc -s test.i -o test.s
3、汇编
下一步就是汇编。在汇编阶段,编译器把编译出来的结果汇编成具体的CPU上的目标代码模块。输入汇编文件.s,输出机器语言.o
gcc -c test.s -o test.o
4、链接
最后,在链接阶段把多个目标代码模块连接成一个大的目标模块。输入机器代码文.o,汇集成一个可执行的二进制代码文件。
gcc test.o -o test