Linux:基础开发工具(三)

前文我们着重讲解了Linux里面vim的操作 ,这篇博客我们将学习如何编译自己的程序以及编译过程

话不多说,现在开始啦

编译器gcc/g++

gcc用来编译.c,也就是c语言程序

g++既可以用来编译.c,也可以编译.cc(c++程序)

而且两者操作方式几乎一样 ,本博客采用g++ 来编译程序

对于.c .cc文件,编译都会走下面四步

  1. 预处理(进⾏宏替换/去注释/条件编译/头⽂件展开等)

  2. 编译(⽣成汇编)

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

  4. 链接(⽣成可执⾏⽂件或库⽂件)

我们在下面一条一条来编译

在分步骤操作之前,我们先来实现一下最基本的操作

这里有两个文件,分别是用c语言编写的code.c以及用c++编写的code.cc

现在我们分别对code.c和code.cc编译,用g++ 文件名 + -o ⽂件输出到⽂件(这里我们使用codec和codecc来区别c和cc)

分别生成对应的可执⾏⽂件codec和codecc

用**./可执行文件**来运行产生结果

下面我们来看看是如何得到这个可编译文件的

下面操作可以简单的记忆为:ESc -> iso

1 预处理(进⾏宏替换)

• 预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等。

• 预处理指令是以#号开头的代码⾏。

• 实例: g++ --E hello.c --o hello.i

• 选项"-E",该选项的作⽤是让 gcc 在预处理结束后停⽌编译过程。

• 选项"-o"是指⽬标⽂件,".i"⽂件为已经过预处理的C原始程序

我们来看看codecc.i里面是什么


可以发现我们的头文件都被展开了,注释都消失了,宏定义也没了,这正是第一步的作用:

预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等

2 编译(⽣成汇编)

• 在这个阶段中,g++ ⾸先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的⼯作,

在检查⽆误后,g++ 把代码翻译成汇编语⾔。

• ⽤⼾可以使⽤"-S"选项来进⾏查看,该选项只进⾏编译⽽不进⾏汇编,⽣成汇编代码。

• 实例: g++ --S hello.i --o hello.s

我们加入codecc.s来看看

这里生成了汇编语言,这就是这一步的作用

在这个阶段中,g++ ⾸先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的⼯作,
在检查⽆误后,gcc 把代码翻译成汇编语⾔

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

• 汇编阶段是把编译阶段⽣成的".s"⽂件转成⽬标⽂件

• 读者在此可使⽤选项"-c"就可看到汇编代码已转化为".o"的⼆进制⽬标代码了

• 实例: g++ --c hello.s --o hello.o

这里就是二进制语言,这就是这步的目的,将汇编语言翻译为二进制语言

4 连接(⽣成可执⾏⽂件或库⽂件)

• 在成功编译之后,就进⼊了链接阶段。

• 实例: g++ hello.o --o hello

生产了可执行文件codecc,我们进去看看里面是什么

是不是感觉很奇怪,还是什么都看不懂,感觉和上面二进制语言一样

那你就错了,这相当于链接阶段将目标文件与系统库(如 C 标准库)合并,生成最终的可执行文件,例如lib64/ld-linux...在运行这个可执行文件的时候,就将库里面的语言翻译出来,也就是

好啦,这就是编译器g++与gcc的使用,留下一个问题,是先有语言还是先有对应语言的编译器呢

拜拜,下一篇博客见!!

相关推荐
一锅炖出任易仙几秒前
创梦汤锅学习日记day32
学习·ai·游戏引擎
Wonderful U3 分钟前
Python+Django实战|在线音乐分享平台:音乐上传、歌手专辑管理、在线播放、自定义歌单、收藏点赞、评论互动
开发语言·python·django
不会C语言的男孩4 分钟前
Linux 系统编程 · 第 2 章:系统调用与库函数
linux·c语言
坤昱7 分钟前
cfs调度类深入解刨——psi科普篇
linux·cfs·psi·cfs调度·eevdf·psi详细分析·linux系统资源监控
小糯米60113 分钟前
JavaScript表达式与运算符
开发语言·javascript·ecmascript
北极星日淘16 分钟前
煤炉自动代拍功能开发 | Python 异步任务实现批量下单
开发语言·python·自动化
影寂ldy30 分钟前
C# 事件完整学习笔记(发布订阅 + 自定义事件 + 内置 EventHandler)
笔记·学习·c#
骑上单车去旅行32 分钟前
openEuler 22.03 离线源码编译 Zabbix 7.0.27 完整最终整合手册
linux·运维·服务器·zabbix
体验家36 分钟前
体验家 XMPlus 网页端问卷 SDK 技术解析:用几行 JavaScript 实现精准场景触发与防打扰机制
开发语言·前端·javascript
二十七剑1 小时前
LangGraph 源码深度解析:Node 节点 Protocol 与 StateNodeSpec 核心机制
开发语言·python