欢迎光临
我们一直在努力

《Linux 开发工具入门:从包管理到代码编译:yum/apt、Vim、GCC 讲解》

前引:Linux 开发工具的强大之处在于其生态的协同性:yum和apt解决 “软件从哪里来” 的问题,Vim 和 VS Code 解决 “代码怎么写” 的问题,GCC 和 Make 解决 “代码怎么跑” 的问题,而 Git 则解决 “代码怎么协作” 的问题。本文将从实际开发场景出发,带你掌握包管理器配置、编辑器快捷键、编译器优化等核心技巧,让每个工具都成为你开发流程中的 “助推器”,而非障碍!

目录

【一】软件包管理器

(1)什么是软件包管理器

(2)Linux软件生态

(3)yum 具体操作

(1)查看软件包

(2)安装软件包

(3)卸载软件包

(4)趣味软件包

【二】编辑器Vim

(1)vim介绍

(1)命令模式

(1)gg命令

(2)shift+g命令

(3)n+shift+g命令

(4)(n)yy命令

(5)(n)p命令

(6)u命令

(7)(n)dd命令

(8)w,b命令

(9)h j k l命令

(10)shift + ~命令

(2)插入模式

(3)底行模式

(4)编辑器自由化

【三】编译器gcc/g++

(1)补充sudo权限

(2)代码文件执行过程

(1)预处理

(2)编译

(3)汇编

(4)链接

(3)动态库和静态链接


【一】软件包管理器

(1)什么是软件包管理器

在Linux下安装软件,有以下几种方法:

(1)下载到程序的源代码,并进⾏编译,得到可执⾏程序

(2)将常用的软件提前编译好,做成软件包,然后放到服务器,通过包管理器⽅便获取这             个编译好的软件包。用户直接进⾏安装

那么我们作为大众用户,肯定是“APP与应用商店”的形式更加的方便快捷人性化!

yum:(Yellow  dog   Updater  Modified)是Linux下⾮常常⽤的⼀种包管理器,主要应⽤在Fedora、RedHat、Centos等发⾏版上

(2)Linux软件生态

对于 centos 等发行版本和 包管理器 的关系如下理解:

CentOS 是 “操作系统”,而包管理器是 CentOS 内置的 “软件管理工具”

对于Linux的软件生态,我们可以这么理解:

  • 软件包服务器 是 “仓库 + 货架”:存储着所有待售商品属于供货商(软件包)
  • CentOS 等发行版 是 “超市品牌方”:决定货架上放哪些商品属于市场(筛选兼容的软件)
  • yum 等包管理器 是 “智能导购 + 配送员”:根据用户需求(比如 “我要装 Nginx”)

为什么有人免费提供软件、发布软件等?比如Linux开源?

单个开发者的能力有限,但 “免费发布 + 开放下载” 能吸引大量社区成员参与,形成 “人人贡献、人人受益” 的循环 —— 这是免费软件能长期维护、不断迭代的关键!

越来越多人参与了免费产品的实现更新,变得有成就感和影响力,又解决了各种Bug

就会有各种企业去使用它,当造成依赖,会不断为它投资等,形成循环,产品更好,市场更大

(3)yum 具体操作
(1)查看软件包

查看软件包类似打开应用商店,查看可以使用的软件!使用指令:查看软件名称、版本等各种信息

yum list

装软件时由于需要向系统⽬录中写⼊内容,⼀般需要sudo或者切到root账⼾下才能完成

(2)安装软件包

sudo yum install 软件包名

或者

sudo yum install -y nginx # 直接安装,不询问确认

(3)卸载软件包

sudo yum remove 软件包名

或者

sudo yum remove -y nginx #加 -y 选项跳过确认

(4)趣味软件包

可以查看当前centos下支持哪些趣味软件包:

搜索关键词适合找什么类型软件示例命令
game 小游戏(如终端游戏、复古游戏) yum search game
fun 趣味工具(如文字特效、动画彩蛋) yum search fun
toys 轻量级娱乐工具(如字符动画、互动程序) yum search toys
utils 创意实用工具(如系统美化、交互增强) yum search utils
具体工具名(如cowsay) 已知的趣味工具(直接搜名称) yum search cowsay

例如:

【二】编辑器Vim

(1)vim介绍

Vim(Vi IMproved)是 Linux/Unix 系统中最经典、最强大的文本编辑器之一,由 Bram Moolenaar 基于传统编辑器 Vi 开发,核心优势是模式化编辑和高效操作,无需鼠标即可完成复杂的文本处理,是程序员、系统管理员的必备工具!

Vim具有三种模式:命令模式、插入模式、底层模式

模式名称核心作用
命令模式 执行命令(移动、删除、复制、撤销等)
插入模式 输入 / 编辑文本(类似记事本的 “编辑状态”)
底行模式 执行全局命令(保存、退出、搜索、替换等)
(1)命令模式

我们可以创建一个 .c  后缀的文件然后用 vim 打开进去默认命令模式

进去之后如下图所示:下面开始讲解各种常用命令(为了方便演示我提前写入一些代码):

(1)gg命令

作用:定位光标到最开始的位置

例如:此时光标在这个位置,按下 gg 之后,光标会移到最开始的位置

(2)shift+g命令

作用:定位光标到结尾的位置

例如:光标现在在开始的位置,shift+g 之后,光标会去到结尾的位置

(3)n+shift+g命令

作用:定位光标到 n 行的位置

例如:现在在末尾,我让它去到 main 函数行

(4)(n)yy命令

作用:复制光标开始的 n 行

(5)(n)p命令

作用:从光标下一行开始,粘贴 n 行

(6)u命令

作用:撤销操作

例如:

现在已经粘贴了,我把操作撤销

(7)(n)dd命令

作用:从光标开始,删除 n 行

例如:

(8)w,b命令

作用:按单词左右移动光标

例如:

(9)h j k l命令

作用:安装字符左下上右移动光标

(10)shift + ~命令

作用:快速大小写转换(按住shift不动,每按一次~可以转换一次)

例如:

(2)插入模式

插入模式可以理解为写代码的环境,我们最开始进入文件的时候默认命令模式

现在我们按 i 即可从命令模式进入插入模式,进入插入模式底部会显示 INSERT

如果想退回命令模式可以按 ESC

(3)底行模式

在命令模式下,我们可以按 Shift + ;或者: 进入底行模式,底部会显示:

如果我们想回到命令模式可以按ESC,也可以 wq 保存退出

(4)编辑器自由化

我们可以看到上面的编辑器格式和我们日常的写代码环境很不同,这是因为配置问题

如果我们想让自己的编辑器更加符合日常编写代码的格式,可以直接执行下面这条指令需200MB

先复制下面这条指令,然后在Linux指令界面下: Ctrl+Shift+/V(粘贴)

不需要在root权限下面,支持普通用户,且普通用户配置之后不会影响其它用户vim编辑格式

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

一键配置过程如下:

(1)先复制上面那条指令到Linux下粘贴(Ctrl+Shift+V)执行,输入root密码

(2)Linux下复制指令(Ctrl+Shift+C)执行指令,再(Ctrl+Shift+V)粘贴执行执行

现在我们创建一个 .c  后缀的文件,看看新vim编辑格式:它自动跳转到插入模式(模式跳转和上面一样)如果我们要保存退出,可以ESC跳到命令模式,然后Shift :进入底层模式,再WQ

【三】编译器gcc/g++

对比维度gccg++
核心定位 GNU 编译器集合,支持多语言(C、C++、Fortran 等),默认优先处理 C 语言 gcc 的 C++ 专用前端工具,专门用于编译 C++ 代码
默认处理语言 – 对 .c 文件默认按 C 语言 语法解析 – 对 .cpp/.cc 等文件默认按 C++ 语言 解析(但需手动链接 C++ 库) 无论文件扩展名为 .c 还是 .cpp,默认均按 C++ 语言 语法解析
对 C++ 标准库的链接 编译 C++ 代码时 不会自动链接 C++ 标准库(libstdc++),需手动添加 -lstdc++ 选项 编译时 自动链接 C++ 标准库(libstdc++),无需手动指定
对 C++ 特性的支持 处理 C 代码时不支持 C++ 特性(如类、命名空间);处理 C++ 代码需显式启用相关逻辑 默认启用所有 C++ 特性(如函数重载、模板、类),无需额外配置
典型适用场景 主要用于编译 纯 C 语言程序 主要用于编译 C++ 程序(包括纯 C++ 代码或混合 C/C++ 代码)
共享特性 基于相同的 GCC 编译引擎,共享编译流程(预处理→编译→汇编→链接)和大部分命令选项(如 -o、-Wall、-g、-O 等) ………….
(1)补充sudo权限

如果普通用户需要sudo权限,可以按如下操作进行:

(1)切换到root用户,打开Vim /etc/sudoers

(2)找到下面这样的界面:root  ALL=(ALL)  ALL

(3)yy 复制这一行,然后进行 p 粘贴,修改用户名为要添加的账号,进底行模式 wq! 保存退出

(2)代码文件执行过程

每一个被编写的代码文件都要经历以下几个阶段:

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

2.编译(⽣成汇编)

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

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

如果我们直接用编译器指令编写文件,会直接从预处理到链接生成可执行文件:

下面我们开始进行分阶段执行演示!

(1)预处理

现在有一个刚被编写完成的 .c 文件,如果我们只想让它完成预处理过程,可以加上 -E 选项,例如

例如:gcc  -E  text.c  -o  text.i

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

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

操作:选项“-E”,该选项的作⽤是让 gcc 在预处理结束后停⽌编译过程

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

然后我们用vim编辑器打开文本看下结果:

(2)编译

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

操作:⽤⼾可以使⽤“-S”选项来进⾏查看,该选项只进⾏编译⽽不进⾏汇编,⽣成汇编代码

例如:  gcc   –S   hello.i   –o   hello.s 

现在我们将刚预处理的文件text.i 经过编译处理:

注:for(int i …,   将定义写在fro循环中是C99的标志,所以需要额外添加 -std = c99

(3)汇编

作用:汇编阶段是把编译阶段⽣成的“.s”⽂件转成⽬标⽂件

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

例如:   gcc   –c   hello.s   –o   hello.o

(4)链接

作用:在成功编译之后,就进⼊了链接阶段,和库进行链接形成可执行程序(文件)

操作:  gcc   hello.o   –o   hello

(3)动态库和静态链接

在上面我们说到:在代码进行链接的时候会和库产生连接,怎么连接?

库(静态库 / 动态库) 是链接过程中提供可复用代码的核心载体

链接过程通过处理库中的代码,解决程序中的符号依赖

头文件提供声明,库提供实现(就好比stdio.h)

最终生成可独立运行(或依赖动态库运行)的可执行文件

这里的库本质就是一个文件,分为动态库和静态库,在Linux下分别是 .so  .a

那么何为动态库和静态库?

动态库:就好比只存一个地址,你需要就根据地址寻找然后使用

静态库:将自己的方法拷贝到目标文件中,因此该程序以后不再依赖静态库

动静态库的安装:

静态库:sudo  yum  install  -y  glibc-static

动态库:sudo  yum  install  -y  libstdc++-static

例如:

在安装动静态库之后,我们可以选择链接的方式:

注意:还有的链接是动态、静态链接混合的,这个我们了解就行!

动态链接:默认就是动态链接

静态链接:gcc  text.o  -o  hello_static -static

动态和静态链接的对比:

动态链接:属于共享库,有效节省资源(比如网络资源、磁盘资源、内存空间),但是动态                    库一旦删除或者出问题,很多程序都无法正常运行

静态链接:不依赖库,程序可以独立运行,但是空间很大,消耗资源

赞(0)
未经允许不得转载:171主机测评 » 《Linux 开发工具入门:从包管理到代码编译:yum/apt、Vim、GCC 讲解》
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址