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 调试程序才能对该可执行程序进行调试。

浙公网安备 33010602011771号