【Linux工具链】从跨平台适配到一键部署:yum多架构支持+Vim远程编辑+gcc交叉编译,解决多场景开发效率瓶颈

🔥个人主页:爱和冰阔乐

📚专栏传送门:《数据结构与算法》【C++】【Linux】

🐶学习方向:C++方向学习爱好者

⭐人生格言:得知坦然 ,失之淡然


🏠博主简介

文章目录

  • 前言
  • 一、软件包管理器
    • [1.1 软件包 / 包管理器的概念](#1.1 软件包 / 包管理器的概念)
    • [1.2 Linux软件生态](#1.2 Linux软件生态)
    • [1.3 镜像](#1.3 镜像)
  • 二、yum具体操作
    • [2.1 查看软件包](#2.1 查看软件包)
    • [2.2 安装软件](#2.2 安装软件)
    • [2.3 卸载软件](#2.3 卸载软件)
    • [2.4 安装源](#2.4 安装源)
  • 三、编辑器Vim的多模式及其操作
    • [3.1 vim的使用](#3.1 vim的使用)
    • [3.2 vim的多模式](#3.2 vim的多模式)
    • [3.3 命令模式](#3.3 命令模式)
    • [3.4 替换模式](#3.4 替换模式)
    • [3.5 视图模式](#3.5 视图模式)
    • [3.6 底行模式](#3.6 底行模式)
    • 3.7vim的小总结
  • 四、vim配置
  • 五、gcc/g++的使用
    • [5.1 Linux下的代码编译](#5.1 Linux下的代码编译)
    • [5.2 预处理](#5.2 预处理)
    • [5.3 编译](#5.3 编译)
    • [5.4 汇编](#5.4 汇编)
    • [5.5 链接](#5.5 链接)
  • 总结

前言

作为C++的学习者,想要在Linux环境下进行开发软件,没有和VS2022这样的编译器进行代码编写是不可能的,本文便要介绍Linux开发过程中必不可少的开发工具!

一、软件包管理器

在学习Linux的安装时,我们需要知道下载安装就是进行:网络下载+安装,安装就是将下载的内容拷贝到系统的指定目录下(安装必须使用root权限)

注意:安装到系统里,只要安装一次,任何人都能使用!

Linux中安装软件有三种常见方法:源码安装,软件包安装(rpm),包管理器yum(centos) apt-get(ubuntu)

  1. 源码安装:需要安装的项目虽然是开源的,由于Linux系统更新迭代快,源码与系统兼容并不确定等,会导致安装很复杂

  2. 软件包安装:在Linux中,将目标软件打包,但可能不会把其依赖的各种库打包或者打包的文件会有版本兼容性问题,也会导致程序运行不成功(即程序之间存在依赖关系),因此在安装目标项目存在依赖缺失版本兼容问题

  3. 包管理器安装:自动解决包的所有依赖,因此推荐使用

1.1 软件包 / 包管理器的概念

在Linux下安装软件,⼀个通常的办法是下载到程序的源代码,并进⾏编译,得到可执⾏程序,但是这样太⿇烦了,于是有些⼈把⼀些常⽤的软件提前编译好,做成软件包(可以理解成windows上的安装程序)放在⼀个服务器上,通过包管理器可以很⽅便的获取到这个编译好的软件包,直接进⾏安装。

软件包和软件包管理器, 就好⽐ "App" 和 "应⽤商店" 这样的关系

yum (Yellow dogUpdater,Modified) 是Linux下⾮常常⽤的⼀种包管理器,主要应⽤在Fedora, RedHat,Centos等发⾏版上,yum便可以理解为软件包管理器的一种,如:华为应用商店,小米应用上单,Apple store的一种

Ubuntu:主要使⽤apt(Advanced Package Tool)作为其包管理器。apt同样提供了⾃动解决依赖关系、下载和安装软件包的功能。

1.2 Linux软件生态

在了解Linux下的软件生态时,我们需要了解软件是由谁提供的,在手机上,我们知道抖音是由字节提供的,王者荣耀是由腾讯提供的,这些均是用户量大可以赚钱,有着利益驱动的商业公司,但是在Linux中的软件,如 ls 指令等,是谁提供的?为什么?

在初学Linux时,我们便需要了解Linux的发展史,在其便提到了如何评估一款操作系统的好坏:内核版本要适中,社区,文档,资料要丰富,人群定位,问题等等方面,这也就是操作系统的生态问题,那么操作系统背后的配套软件也算生态的一环,因此作为该生态下的开发者自然愿意让生态变得好用且如若许多人用其的软件,便会对其产生依赖,那么便不会希望该软件没了或者是生态没了

了解完生态的概念,我们便可以知道Linux下载软件的过程,开发者开发对应的软件,将其的源代码托管到其的官网上/github上,再将源代码编译形成了可以直接被安装的软件,再将软件上到对应的社区中。因此用户只需在自己的Linux中通过yum/apt在社区中进行下载

可是我们的机器怎么知道对应的软件在哪,下载是需要下载链接的。其实很简单,因为我们的操作系统用的就是别人社区的,即操作系统内部进行了内置链接,因此我们只需要yum后面跟要写的软件即可。

1.3 镜像

除了鸿蒙操作系统外,操作系统都是由外国人开发的,因此完整的生态是在国外,因此内置的链接一定是外网的链接,由于国内对国外管控比较严格,那么我们是怎么进行访问的,这里便需要提到镜像,将国外的资源镜像(拷贝)过来,并更改下载链接,因此我们安装的软件走的是国内的链接

二、yum具体操作

2.1 查看软件包

通过 yum list 命令可以罗列出当前⼀共有哪些软件包,由于包的数⽬可能⾮常之多,这⾥我们需要使⽤ grep命令只筛选出我们关注的包

bash 复制代码
yum list | grep sl

注意事项:

  • 软件包名称: 主版本号.次版本号.源程序发⾏号-软件包的发⾏号.主机平台.cpu架构.
  • "x86_64" 后缀表⽰64位系统的安装包, "i686" 后缀表⽰32位系统安装包. 选择包时要和系统匹配.
  • "el7" 表⽰操作系统发⾏版的版本. "el7" 表⽰的是 centos7/redhat7. "el6" 表⽰ centos6/redhat6.
  • 最后⼀列, base 表⽰的是 "软件源" 的名称, 类似于 "⼩⽶应⽤商店", "华为应⽤商店" 这样的概念.
  • Ubuntu 有上述有详细介绍

2.2 安装软件

通过 yum, 我们可以通过很简单的⼀条命令完成 gc 的安装

bash 复制代码
#Centos
yum install -y sl
#Ubunto
apt install -y sl
  • yum/apt 会⾃动找到都有哪些软件包需要下载, 这时候敲 "y" 确认安装,如若直接安装加入 -y 即可
  • 出现 "complete" 字样或者中间未出现报错,说明安装完成

注意:

  • 安装软件时由于需要向系统⽬录中写⼊内容, ⼀般需要 sudo 或者切到 root 账户下才能完成.
  • yum/apt安装软件只能⼀个装完了再装另⼀个 ,正在yum/apt安装⼀个软件的过程中, 如果再尝试⽤yum/apt安装另外⼀个软件, yum/apt会报错
  • 如果 yum / apt报错, 可以大模型搜索问一下

除了上面的sl命令,还有很多有趣的指令,可以在CSDN上搜搜

2.3 卸载软件

很简单,仍是一条命令

bash 复制代码
#Centos
yum remove -y  sl
#Ubuntu
apt remove -y sl

注意:

关于 yum / apt 的所有操作必须保证主机(虚拟机)⽹络畅通!!!

可以通过 ping 指令验证

bash 复制代码
ping www.baidu.com
# 当天然yum / apt也能离线安装,但是和我们当前⽆关,暂不关⼼。 

2.4 安装源

查看内置的下载链接即安装源

bash 复制代码
 ll /etc/yum.repos.d/

标准源:称为稳定软件,即安全无故障运行了很长时间

扩展源:新上线的,需要用户自行鉴别选择,当其运行较长时间没有bug会变为标准源

查看安装源

bash 复制代码
vim CentOS-Base.repo

三、编辑器Vim的多模式及其操作

3.1 vim的使用

vim编辑器是所有Linux系统自带的,vim是一款使用成本较高的编辑器,因此我们在前期学习的时候,要多使用多练,当我们对vim能唯手熟尔时,那么就没有其他编辑器可以难道我们了!

Linux下查看vim

bash 复制代码
vim  --version

下面我们通过创建文件并打开vim

bash 复制代码
touch code.c
vim code.c

如下便是进入了vim编辑器

我们发现进入vim后无法进行写入,也无法退出,或者凑巧输入对了,迷里雾里的。因此如果我们想要退出vim便有两种方法

  1. 通过按键盘的左上角的ESC,然后同时按 shift+; 后输入 q 即可,如果不行可以按 !q,如果想要保存退出输入wq即可,同理也可以强行退出按 !wq
  2. 快捷键:shift+z 或者是大写ZZ按两下(尽量不要使用该方法,会导致vim卡死无法退出)

3.2 vim的多模式

为什么我们进入vim会很难退出或者进入编写代码,这便是因为vim是多模式的编辑器。

vim一共有十二种模式,这里我们先介绍最常见的三种模式:命令模式底行模式插入模式(编辑模式)

当我们首次打开vim进入的便是命令模式(默认模式),那么想要进入插入模式只需输入i即可,当左下角显示insert便代表进入插入模式,如果想要退出,在插入模式是无法退出的,只能退回命令模式(也退不出),因此我们需要在该模式下按shift+; ,进入底行模式,在该模式下输入 wq即可保存退出vim

在底行模式下回退到命令模式也是按ESC,需要注意的是插入模式和底行模式无法相互转换

命令模式进入插入模式除了 i ,还有 ao ,其中i进入插入模式,光标在原位置不动,a是光标后移一个位置,o则是光标向下移动一行
底行模式下,除了wq可以保存退出外,还可以shift+zz也可以快速退出,在底行模式下可以 set nonu 则表示取消行号,set nu 则显示行号

3.3 命令模式

命令模式的核心便是方便我们快速编辑

  1. 快速回到第一行的开始位置:快速按两下 gg
  2. 快速定位到结尾:G / shift+g (shift+g=G)
  3. 定义任意一行:n+shift+g(如定位到第五行,按5,再按shift+g)
  4. 光标定位当前行的结尾:shift+¥(4)
  5. 光标定位到当前行的开始:shift+^(6).
  6. 上下左右快速移动:左移:h 下移:j 上移:k 右移:l ,vim也支持键盘的上下左右箭头移动
  7. 以单词为单位向右移动:w,也支持 n+w
  8. 以单词为单位向左移动:b,也支持 n+b

为什么命令模式下会使用hjkl便是因为在以前的键盘上没有上下左右键,快速记忆方法:h在最左侧为左,l在最右侧为右,k是King,在最上面,j是jump往下跳,向下移

  1. 复制:yy,一次性复制多行:n+yy ,粘贴:p,一次性粘贴行多:n+p
  2. 删除:dd,多行删除 n+dd
  3. 撤销历史命令:u,一旦退出文件编辑,无法再进行撤销,但是如果只是保存,没有进行q操作,可以撤销
  4. 撤销u操作:ctr+r,一旦退出文件编辑,无法再进行撤销,但是如果只是保存,没有进行q操作,可以撤销
  5. 剪切+粘贴操作:dd+p
  6. 删除光标所在位置的字符(删右侧):x,也可以进行批量化删除,n+x
  7. 光标右侧不动,左侧删除:shift+x,同理也可以批量化删除
  8. 替换光标所在字符:r+要输入的目标字符,将多个字符替换为目标字符:n+r+要输入的字符
  9. 大小写进行替换:shift+~(ESC键的下面,1的左边)
  10. 选中单词高亮:shift+#(3) ,逆向查找:n

3.4 替换模式

按ESC进入命令模式,再按 shift+r=R 进入替换模式(在vim左下角显示replace即可),在该模式下输入的任何字符都可以将光标内容进行替换,同时替换模式退出命令模式按 ESC

3.5 视图模式

对代码进行批量化注释,我们虽然可以直接从命令模式切换到插入模式,若如进行多行注释,不断来回切换太过于繁琐,因此这里我们便需要介绍一种新的模式------视图模式,我们在命令模式下按 ctrl+v,在vim左下角出现V-BLOCK即可,在该模式下,我们可以按"hjkl"进行区域的选择,

例如:我们想要对第6到第10行的批量化注释,我们只需按j到第10行(在该模式下一般按上下左右键没有用,只能按hjkl)即区域选择,然后再按 shift+i 进入插入模式,按//注释一行,然后按ESC回到命令模式的同时批量化注释6-10行

1.ctrl+v进入视图模式,再按j进行区域选择

2.shift+i进入插入模式,再输入//

3.按ESC进入命令模式的同时,vim自动对区域选择的内容进行批量化注释

除了上述的 hjkl 可以进行多行选择注释,我们同样可以通过n+hjkl的方法进行多行注释,如若将代码保存退出后,想要将之前注释的撤销,只需ctrl+v进入视图模式,再通过shift+g选中多行,再输入d进行删除,如若选中一列,则需要重复执行两次,选中2列(l(向右选择)+shift+g),只需一次d操作即可

3.6 底行模式

1.在命令模式下进入底行模式,可以通过 + 命令 进行不退出vim的情况下来直接执行命令

示例:

cpp 复制代码
#include<stdio.h>

int main()
{
   int i=0;
   for(i=0;i<10;i++)
   {
     printf("hello world\n");
   }
}

!ls -al

! gcc code.c


! ./a.out

2. 批量化替换功能:

还可以通过% ///,将目标元素进行替换,如将printf替换为cout:%s/printf/cout/

3. vim创建文件

在未修改的vim中,除了touch code.c创建文件再进入vim进行编辑外,我们还可以直接vim test.c进入vim,如若在底行模式下输入wq即保存再退出,那么便会自动生成该文件,如果只是q(退出),那么在系统重便不会存在该文件

bash 复制代码
#创建文件再进入vim进行编辑
touch code.c
vim code.c

#vim+文件
vim test.c
#进入底行模式再保存退出
:wq


4.分屏操作

进入底行后,输入vs test.c,vim便会实现分屏操作,左边打开test.c ,右边是code.c

bash 复制代码
:vs test.c
#输入wq,由于光标在左侧,先退出test.c
:wq
#ll下,便发现形成了test.c
ll

注意:我们通过光标在哪个窗口下,对应的就是操作哪个窗口,因此这里边涉及到光标切换到不同窗口,这里有很多方法,我们介绍如下指令:ctrl+ww

3.7vim的小总结

我们在vim编写完代码,然后gcc时,经常会遇到报错,我们想要进入vim时,让光标直接定位在报错的那一行,我们只需vim code.c +n 便可以让光标到指定行

bash 复制代码
vim code.c +14

!+历史命令的首字母,可以匹配最近的命令,如:

bash 复制代码
#自动匹配vim code.c +14
!v

四、vim配置

在初始情况下,vim是不会像vscode或者vs2022自带自动补全功能,缩进换行等功能,因此我们需要对vim进行配置。

在Linux中会存在隐藏文件:.vimrc,如若没有我们可以自己创建

bash 复制代码
ls -al
touch .vimrc
ls -al

注意,我们创建的.vimrc是放在普通用户的家目录home下,创建完成后,我们便可以进入.vimrc中进行配置,如我们可以配置行号输入:set nu ,然后我们进入code.c中便发现输入的每行都有行号了,如果想要将该配置删除,只需注释它即可

bash 复制代码
"set nu

注意:如若想要在root账号下配置,让所有用户均可使用,那么我们需要在 ls etc/vimrc 来进行搜索是否存在,不存在便创建,但是我们不推荐在root账号下配置

由于vim配置过于复杂且容易发生错误,在普通账号配置即可,但是一个个命令进行配置过于复杂,如果想要自己配置属于自己的快捷方法,可以在百度上进行搜索vim配置,如只配置为大多数的快捷方法,只需在gitee上搜索开源的vimforcpp即可,该开源安装 只支持centos系统,不支持ubunto,且不能在root账号运行,只能放在普通账号下**

在安装方法中复制:curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh ,然后返回你的账号粘贴到命令行上,如若成功,需要输入自己的root密码


最后只需要按照提示输入:source ~/.banshrc让配置生效即可

五、gcc/g++的使用

5.1 Linux下的代码编译

gcc和g++的指令选项是相同的,区别在于gcc只可以编译C语言,g++既能编译C语言也可以编译C++,因此这里我们只用g++进行演示

在Linux中我们进行代码编译可以通过 gcc + 文件 来编译,默认会在系统中形成a.out的可执行程序,然后我们再 ./a.out便可以将代码跑起来了

bash 复制代码
gcc code.c
./a.out


如若我们想要将编译后的文件形成特定的可执行程序只需 :gcc code.c -o mycode(-o是形成目标文件的意思),那么就形成了mycode的可执行程序了

bash 复制代码
gcc code.c -o mycode

5.2 预处理

预处理的主要作用便是将头文件展开,将注释去掉,宏替换,条件编译

将预处理结果写到code.i文件中,E的意思就是从现在开始进行程序翻译,在预处理做完的时候就停下来,注意在预处理完的code.i依旧是C语言

bash 复制代码
gcc -E code.c -o code.i
ls -l
#打开code.i看到预处理过程
  • 预处理指令是以#号开头的代码⾏。

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

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

5.3 编译

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

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

具体操作如下:

bash 复制代码
gcc -S code.i -o code.s
ls -l
vim code.s

5.4 汇编

汇编的作用便是生成及其可识别的代码,.o文件称为可重定位目标文件,在Windows,vs2022中形成的便是xxx.obj文件,该目标文件便是二进制的文件了,因此我们打开文件是一群乱码,该文件不可执行: ./code.o会报错,即使加上可执行权限也不可以,因为其只是将我们写的代码变为二进制,而我们的代码中还会包含很多的库方法,方法的实现是在库里面的,需要通过链接才可执行

其中不论在centos系统中还是Ubunto系统中都有一条指令:ldd可以查看其依赖的库

bash 复制代码
ldd code

在此可使⽤选项"-c"就可看到汇编代码已转化为".o"的⼆进制⽬标代码了,-c的意思便是程序开始翻译,汇编完成便停下来

bash 复制代码
gcc -c code.s -o code.o
./code.o


报错显示:

5.5 链接

gcc是编译C语言的,其会在系统中查找我依赖了哪些库

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

bash 复制代码
gcc code.o -o code

帮助记忆:预处理,编译和汇编指令合在一起便是键盘左上角的ESC键,其生成的可执行程序的后缀为iso,这和苹果的操作系统iOS很相似,我们根据此方法便可以记住指令和后缀了

总结

坚持到这里,已经很棒啦,希望读完本文可以帮读者大大更好了解Linux的内容!!!如果喜欢本文的可以给博主点点免费的攒攒,你们的支持就是我前进的动力🎆

资源分享:
阿⾥云官⽅镜像站
清华⼤学开源软件镜像站
vim配置安装

相关推荐
zzzsde2 小时前
【Linux】权限(2):文件权限的深入理解&&粘滞位
linux·运维·服务器
火龙谷3 小时前
dy自动化遇到的滑动问题
运维·自动化
序属秋秋秋3 小时前
《Linux系统编程之开发工具》【实战:倒计时 + 进度条】
linux·运维·服务器·c语言·c++·ubuntu·系统编程
IT小哥哥呀5 小时前
Nginx高可用配置实战:负载均衡 + 健康检查 + 动态扩展
运维·nginx·负载均衡·devops·日志分析·openresty·动态扩展
刘某的Cloud5 小时前
ceph osd down排查
linux·运维·ceph·系统·osd
喜欢你,还有大家9 小时前
Docker-仓库-镜像制作
运维·docker·容器
安审若无10 小时前
图数据库neoj4安装部署使用
linux·运维·数据库
做运维的阿瑞11 小时前
CentOS DNS故障排查完整解决方案:从症状到根因的系统化诊断
linux·运维·centos
QT 小鲜肉12 小时前
【个人成长笔记】在 Linux 系统下撰写老化测试脚本以实现自动压测效果(亲测有效)
linux·开发语言·笔记·单片机·压力测试