GCC编译流程及常用选项
1) 生成可执行程序
最简单的生成可执行文件的写法为:
$ cd demo #进入源文件所在的目录
$ gcc main.c #在 gcc 命令后面紧跟源文件名
如果不想使用默认的文件名,那么可以通过-o
选项来自定义文件名,例如:
$ gcc main.c -o main.out
这样生成的可执行程序的名字就是main.out
。
#
表示注释,读者可以不写,我写上是为了让读者明白每个命令的含义。#
是 Shell 中的注释格式。
打开 demo 目录,会看到多了一个名为 a.out 的文件,这就是最终生成的可执行文件,如下图所示:
这样就一次性完成了编译和链接的全部过程,非常方便。
2) GCC编译流程
GCC 编译器在编译一个C语言程序时需要经过以下 4 步:
- 将C语言源程序预处理,生成
.i
文件。 - 预处理后的.i文件编译成为汇编语言,生成
.s
文件。 - 将汇编语言文件经过汇编,生成目标文件
.o
文件。 - 将各个模块的
.o
文件链接起来生成一个可执行程序文件。
GCC 编译流程如下图所示:

gcc编译选项 | 选项的意义 |
---|---|
-c |
编译、汇编指定的源文件,但是不进行链接 .o |
-S |
编译指定的源文件,但是不进行汇编 生成以.s 作为后缀的汇编语言文件 |
-E |
预处理指定的源文件,不进行编译 GCC 不会保留预处理阶段的输出文件,也即.i 文件 |
-o [file1] [file2] | 将文件 file2 编译成可执行文件 file1 |
-I directory | 指定 include 包含文件的搜索目录 |
-g |
生成调试信息,该程序可以被调试器调试 |
-S选项
将C语言源文件编译为汇编语言,但是并不汇编该程序。使用该选项,我们可以查看C语言代码对应的汇编代码。
-E 选项
-E
选项将C语言源文件进行预处理,但是并不编译该程序。对于一般的预处理问题,可以使用这个选项进行查看,例如,宏的展开问题、文件的包含问题等。
-I 选项
由于指定包含的头文件的目录,这一点对于大型的代码组织来说是很有用的。
-g 选项
-g
选项可生成能被 gdb 调试器所使用的调试信息。只有使用了该选项后生成的可执行文件,才带有程序中引用的符号表。这时 gdb 调试程序才能对该可执行程序进行调试。