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 步:

  1. 将C语言源程序预处理,生成.i文件。
  2. 预处理后的.i文件编译成为汇编语言,生成.s文件。
  3. 将汇编语言文件经过汇编,生成目标文件.o文件。
  4. 将各个模块的.o文件链接起来生成一个可执行程序文件。

GCC 编译流程如下图所示:

GCC编译流程
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

 

posted @ 2020-04-01 17:25  <CZX>/  阅读(465)  评论(0)    收藏  举报