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生成所有警告信息
-Onn的取值范围: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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吮指原味张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值