gcc执行的过程

市井之徒——徒劳往返——返老还童——童牛角马——马首是瞻——瞻前顾后——后顾之忧——忧国奉公——公子王孙——孙康映雪

gcc是我们Linux下编译C文件的重要工具,在用gcc对源文件进行处理时,我们知道要经历以下几个过程:

预处理——编译——汇编——链接

通常将前面三步统称为编译

预处理

执行所有的预处理命令,所有以”#”开头的指令为预处理指令,在进行预处理时,系统将我们的源文件转化成C的语法,将头文件中的内容展示出来,并添加到我们源程序中执行

#include <stdio.h>
int main(int argc, char **argv)
{  
     printf("hello world!\n");
     return 0;
}

其中预处理指令后面的 <> ,为头文件系统的路径,有的用“”括起来,这是表示头文件在当前路径下寻找。当然,我们可以将预处理单步运行:加上“-E”即可。

这里写图片描述

我们可以看到它将系统头文件包含的内容给打印到屏幕上了。那么,如果我们不要预处理指令,程序会怎么样呢?对于系统而言,我们不进行预处理指令有时候仅仅会产生警告,只要我们脸皮够厚,这些警告都不是问题,因为我们的程序没问题,没问题就可以继续执行呀。当然,如果你要求自己的代码规范严谨,完全可以使用“-Wall”选项,这样会将所有的警告信息打印出来,然而对于一个基础不是很好的程序员来说,这无疑是在作死。

我们可以将预处理的信息放入hello.i文件中。

编译

编译的工作主要是找我们的语法错误。将预处理的“.I”文件中的内容编程成汇编文件,即“.s”文件,我们也可以直接添加“-S”选项,生成“.s”文件:

这里写图片描述

汇编

汇编的作用主要是将代码转化成系统认识的机器指令,然后生成我们的“.o”目标文件,我们可以用“-c”选项直接生成我们的“.o”文件,即只编译,不链接。

这里写图片描述

链接

将程序的目标文件与其他文件加起来链接生成可执行文件,这些链接文件一般是静态库和动态库。

这里写图片描述

一般一步到位的是:

gcc hello.c     //生成可执行文件.out
gcc hello.c -o hello  //生成hello可执行文件

这里要注意的是“-o”选项一般都是起名字的作用。

一般在公司里团队合作开发项目的时候,都是每个人负责一部分的代码,然后再整合到一起,那么这时候我们没有main函数是不能连接的,所以这时候我们一般都是生成“.o”文件,做链接发给负责人就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值