gcc的工作流程图以及常用参数选项的代码使用示例

1. gcc工作流程

在这里插入图片描述

2. gcc常用参数选项。

gcc编译选项 作用
-o [file] 指定输出文件的文件名为file。无论是预处理、编译、汇编还是链接,这个选项都可以使用。
-E 预处理指定的源文件,不进行编译。
-S (预处理并)编译指定文件,不进行汇编。(即对.c文件进行-S操作时,既预处理又编译;对.i文件进行-S操作时,只进行编译。)
-c 预处理、编译和汇编源文件,但是不进行链接。(类比-S)
-I(大写i) directory 指定include包含文件的搜索目录
-g 在编译的时候,生成调试信息,该程序可以被调试器调试
-D 在程序编译的时候,指定一个宏
-w 不生成任何警告信息
-Wall 生成所有警告信息
-On n的取值范围:0~3。编译器的优化选项的四个级别:-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-l(小写l) 在程序编译的时候,指定使用的库
-L 指定编译的时候,搜索的库的路径
-fPIC/fpic 生成与位置无关的代码
-shared 生成共享目标文件,通常用在建立共享库时
-std 指定C方言,如:-std=c99,gcc默认的方言是GNU C

3. 代码示例:

首先创建一个hello.c的文件。
在这里插入图片描述

3.1 预处理

第一步,对hello.c文件进行预处理,生成hello.i文件。

gcc hello.c -E -o hello.i 

生成的hello.i文件如下图所示。
在这里插入图片描述
在这里插入图片描述
可以看出,hello.i的行数相比于hello.c明显增加了,这是因为经过预处理后,头文件的内容被包含进来;PI变成了3.14,这是因为预处理后,宏定义被替换了;并且预处理后,原来程序的注释也被删除了。

3.2 编译

第二步,对预处理文件hello.i进行编译,生成汇编文件hello.s。

gcc hello.i -S -o hello.s

生成的hello.s文件如下图所示。
在这里插入图片描述
可见,生成的是汇编代码。

3.3 汇编

第三步,对汇编文件hello.s进行汇编,生成可重定位目标文件(OBJ文件)hello.o。

gcc hello.s -c -o hello.o

在这里插入图片描述
打开的话,如下图所示。
在这里插入图片描述

可见,生成的hello.o,即生成的目标文件(OBJ文件)是二进制代码。

3.4 链接

第四步,进行链接。假设此时有另外一个目标文件main.o,对这两个目标文件进行链接,生成可执行文件hello。

gcc hello.o main.o -o hello

由于没有main.o,因此我们执行以下代码,生成可执行文件hello。

gcc hello.o -o hello

在这里插入图片描述
可见,生成的可执行程序hello,也是二进制文件。

当然,想直接生成可执行文件有更简单的操作。如下代码所示,直接对源代码hello.c进行编译链接,生成可执行目标文件。

gcc hello.c -o hello

3.5 执行

第五步,执行可执行程序。

./hello

在这里插入图片描述
成功执行。

猜你喜欢

转载自blog.csdn.net/mahoon411/article/details/113329176