[Linux]第六节 Linux编译器gcc/g++

首先我们需要明确概念gcc只能用来编译c语言,g++即可用来编译c语言,又可用来编译c++,但我们一般用gcc编译c,g++编译c++

一、gcc的使用

当我们写好代码以后可以直接

gcc test.c

然后它会自动生成一个可执行程序a.out这个可执行程序的名字不重要,关键是它的属性具有可执行权限

然后我们直接使用如下命令,就可以进行运行了

./a.out

二.g++的使用

g++的使用与gcc是十分类似的

不过我们需要先安装一下g++

yum install gcc gcc-c++

安装以后,我们就可以使用g++编译c++代码了,它默认生成的就是a.out文件

三、gcc编译链接过程

我们知道执行一个c程序需要经过一下几个步骤

  • 预处理
  • 编译(生成汇编)
  • 汇编(生成机器可识别代码)
  • 链接(生成可执行文件或库文件)

1.预处理

在预处理过程中,会有如下操作

  1. 去掉注释
  2. 头文件展开
  3. 宏替换
  4. 条件编译

我们先来展示前三点

我们需要先输入如下指令

gcc -E test.c -o test.i

“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

这里,我们还需要了解的一点是,我们为什么可以在windows或者linux上进行C/C++或者其他形式的开发呢?

这是因为我们的系统中一定要提前或者后序安装上,C/C++开发相关的头文件,库文件

而这些文件就在下面的路径中

/usr/include

​

然后我们可以打开一下比如stdio.h

而我们前面的头文件展开,就是将这里面的内容全部拷贝到test.i中

其实我们在安装vs2022的时候,还在安装的时候,就要选择对应的开发包,同步也在下载C的头文件和库文件也就是说,在windows也同步有着对应的文件

还有条件编译,也会在预处理阶段给解决掉

gcc -E test.c -o test.i

不过对于宏,我们也可以在编译时候去定义的

gcc -E test.c -o test.i -DDEBUG

而条件编译的作用就是

比如vs2022有社区版和专业版,而公司不可能会专门维护两份代码,所以社区版只是专业版裁剪掉了某些功能得到的,而这个裁剪用的就是条件编译.

2.编译(生成汇编)

在我们与预处理完以后,我们的代码其实还是C语言

所以我们下一步就是生成汇编

gcc -S test.i -o test.s

不过我们也可以从test.c直接生成汇编

gcc -S test.c -o test.s

生成以后就是这样的:

在这个阶段中,gcc 会检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言

3.汇编(生成机器可识别代码)

  • 汇编阶段是把编译阶段生成的“.s”文件转成目标文件

  • 在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了

下一步

gcc -c test.s -o test.o

不过这次打开,我们看到的将会是这样的:

一片乱码,这是因为这个.o文件是二进制文件,而vim是文本编辑器。所以我们可以使用二进制查看工具比如od:

我们运行:

od test.o

4..链接(生成可执行文件或库文件)

我们直接将所有的目标文件进行链接起来即可

gcc test.o -o atest


最终这个atest就是我们的可执行文件,此处顺便附上运行结果

以下我会列举可执行程序的生成方式:

1.直接生成

gcc test.c

 这种方式最终生成的可执行程序是a.out

2.

gcc test.c -o test

这种方式就和前面比较相似,直接将.c文件变成一个可执行程序test

不过也可以这样写,反正记住无论如何-o后面跟的永远都是最终的可执行程序

gcc -o test test.c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值