【Linux】编辑器vim的使用和理解gcc编译器 - 详解

news/2025/11/27 17:53:26/文章来源:https://www.cnblogs.com/tlnshuju/p/19278958

【Linux】编辑器vim的使用和理解gcc编译器 - 详解

2025-11-27 17:50  tlnshuju  阅读(0)  评论(0)    收藏  举报

文章目录

  • 前言
  • 一. 软件包管理器
    • 1.1 什么是软件包
    • 1.2 Linux软件生态
  • 二. 编辑器Vim
    • 2.1 vim的基本概念
    • 2.2 vim的安装
    • 2.3 vim常见的工作模式
      • 正常/普通/命令模式命令集
      • 插入模式命令集
      • 底行模式命令集
      • vim操作总结
    • 2.4 vim的便利操作
      • 同时打开多个文件
      • 批量化注释
      • 批量化去注释
    • 2.5 简单配置vim
  • 三. 编译器gcc/g++
    • 3.1 预处理(进行宏替换)
    • 3.2 编译(生成汇编)
    • 3.3 汇编(生成机器可识别代码)
    • 3.4 链接(生成可执行文件或库文件)
  • 四. 静态库和动态库
  • 最后


前言

在上一篇文章中,我们详细介绍了Linux权限的内容,主要包括文件权限和目录权限,希望大家可以多去练习熟悉一下,那么本篇文章将带大家详细讲解Linux中编辑器vim的使用和对gcc编译器的理解的内容,接下来一起看看吧!


一. 软件包管理器

1.1 什么是软件包

  • 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。
  • 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装。
  • yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器。主要应用在Fedora,RedHat,Centos等发行版上。
  • Ubuntu:主要使用apt(Advanced Package Tool)作为其包管理器。apt同样提供了自动解决依赖关系、下载和安装软件包的功能。

1.2 Linux软件生态

在这里插入图片描述

二. 编辑器Vim

在这里插入图片描述

2.1 vim的基本概念

Vim 是一款高效、可定制、基于模式的文本编辑器,广泛用于代码编写、文本处理及系统配置文件编辑等场景,尤其在终端环境中极为流行。

vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、 windows。

2.2 vim的安装

安装vim的指令:

sudo yum install vim // CentOS
sudo apt install vim // Unbuntu

安装完后输入指令vim可以看到以下界面:

在这里插入图片描述

可以按:Shift+;),然后输入q并且回车即可退出。

2.3 vim常见的工作模式

vim作为一款多模式的编辑器,有着各种各样的模式,总共有12种模式,学会其中的5种就可以应对多数开发环境了。

  • 正常/普通/命令模式

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式下,或者到底行模式。

  • 插入模式

只有在插入模式下,才可以做文字输入,按ioa都可以进入该模式,按i键比较频繁,按ESC键可回到命令行模式。该模式是用的最频繁的编辑模式。

  • 底行模式

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。
在命令模式下,按:(shift+;)即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入:help vim-modes

  • 可视模式

可进行批量修改,ctrl+v可进入该模式。

  • 替换模式

可进行文本的替换,R(shift+r)可进入该模式。

正常/普通/命令模式命令集

进入到插入模式

从插入模式切换为命令模式

ESC

移动光标

提示:这里的#代表数字

删除文字

提示:这里的#代表数字

复制

提示:这里的#代表数字

替换

撤销上一次操作

更改

提示:这里的#代表数字

跳至指定的行

提示:这里的#代表数字

插入模式命令集

插入模式主要用于文本的写入,在命令模式下,按i键进入插入模式。

在插入模式下,按Shift+Insert可以粘贴剪切板的内容

在命令模式下:

  • Shift+i:切换到插入模式,并且将光标定位到当前行行首
  • Shift+a:切换到插入模式,并且将光标定位到当前行行尾
  • Shift+o:切换到插入模式,向上增加一行并且定位到上一行的行首

在插入模式下,按ESC键即可返回到命令模式。

底行模式命令集

在命令模式下,按:(Shift+;)进入底行模式。

列出行号

跳到文件中的某一行

查找字符

/是从前往后查找,?是从后往前查找

保存文件

离开vim

vim操作总结

在这里插入图片描述

2.4 vim的便利操作

同时打开多个文件

如果我们已经使用vim打开了一个文件,还想要再打开另外一个文件,可以切换到底行模式并且输入vs 文件名称即可。

在这里插入图片描述
当前光标是在test.c文件,那么如何将光标切换到code.c文件呢?

可以使用ctrl+ww命令,即可将光标定位到上一个文件code.c

批量化注释

如果想要注释多行,一行一行注释就太慢了,可以尝试用一下批量化注释

操作如下:

  1. 首先在命令模式下按ctrl+v进入视图模式
  2. 在视图模式下可以选择指定的多行,使用h、j、k、l移动光标(h左、j下、k上、l右
  3. Ishift+i)进入插入模式
  4. 打了注释之后按ESC键返回命令模式即可

在这里插入图片描述

批量化去注释

操作如下:

  1. 首先在命令模式下按ctrl+v进入视图模式
  2. 在视图模式下可以选择指定的多行,使用h、j、k、l移动光标(h左、j下、k上、l右
  3. d删除即可

在这里插入图片描述

2.5 简单配置vim

配置文件的位置

常用配置选项

参考资料:Vim从入门到精通

三. 编译器gcc/g++

  1. 预处理(进行宏替换/去注释/条件编译/头文件展开等)
  2. 编译(生成汇编)
  3. 汇编(生成机器可识别代码)
  4. 链接(生成可执行文件或库文件)

gcc编译选项:

格式 gcc[选项] 要编译的文件 [选项] [目标文件]

3.1 预处理(进行宏替换)

  • 预处理功能主要包括宏定义、文件包含、条件编译、去注释等。
  • 预处理指令是以#号开头的代码行。
  • 实例: gcc –E hello.c –o hello.i
  • 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程
  • 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

3.2 编译(生成汇编)

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

  • 汇编阶段是把编译阶段生成的“.s”文件转成目标文件
  • 可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了
  • 实例: gcc –c hello.s –o hello.o

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

在链接时,可以动态链接,也可以静态链接(gcc默认是动态链接),而静态链接需要带选项-static

动态链接

ldd 可执行程序
ldd命令用于打印程序或者库文件所依赖的共享库列表

在这里插入图片描述

静态链接
gcc默认是动态链接,如果想要静态链接,需要带上-static选项。

在这里插入图片描述

可以明显看到静态链接后产生的可执行程序非常大,这是为什么呢?

在我们的实际开发中,不可能将所有代码放在一个源文件中,所以会出现多个源文件,而且多个源文件之间不是独立的,而会存在多种依赖关系,如一个源为件可能要调用另一个源文件中定义的函数,但是每个源文件都是独立编译的,即每个*.c 文件会形成一个 *.o文件,为了满足前面说的依赖关系,则需要将这些源文件产生的目标文件进行链接,从而形成一个可以执行的程序。这个链接的过程就是静态链接。静态链接的缺点很明显:

动态链接的出现解决了静态链接中提到问题。动态链接的基本思想是把程序按照模块拆分成各个相对独立部分,在程序运行时才将它们链接在一起形成一个完整的程序,而不是像静态链接一样把所有程序模块都链接成一个单独的可执行文件。

动态链接其实远比静态链接要常用得多。

在这里涉及到一个重要的概念: 库

我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该
函数的声明,而没有定义函数的实现,那么是在哪里实“printf”函数的呢?

系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。

四. 静态库和动态库

  • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a
  • 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件。

gcc默认生成的二进制程序,是动态链接的。

Linux下,动态库为XXX.so,静态库为XXX.a
Windows下,动态库XXX.dll,静态库为XXX.lib

一般我们的云服务器,C/C++的静态库并没有安装,可以采用如下方法安装:

# Centos
yum install glibc-static libstdc++-static -y

gcc常用选项(了解)

  • -E :只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面(-o
  • -S :编译到汇编语言不进行汇编和链接
  • -c :编译到目标代码(不进行链接操作)
  • -o :输出到目标文件
  • -static :此选项对生成的文件采用静态链接
  • -g :生成调试信息。GNU 调试器可利用该信息
  • -shared :此选项将尽量使用动态库,所以生成文件比较小,但是需要系统存在动态库
  • O0、O1、O2、O3 :编译器优化的三个选项,-O0没有优化、O1是缺省值、O3优化级别最高
  • -w :不生成任何警告信息
  • -Wall :生成所有警告信息

最后

本篇关于编辑器vim的使用和理解gcc编译器到这里就结束了,其中还有很多细节值得我们去探究,需要我们不断地学习。如果本篇内容对你有帮助的话就给一波三连吧,对以上内容有异议或者需要补充的,欢迎大家来讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/978784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UWB汽车钥匙介绍

​ 汽车钥匙经历了机械钥匙、遥控钥匙、PEPS、数字钥匙四个阶段,而数字钥匙又分为BLE/NFC/UWB三种技术路线。 由于UWB安全性、定位精度、作用范围明显好于BLE和NFC,因此成为汽车数字钥匙的最优技术。PEPS是指无钥匙进…

php 8.2 配置安装php-zbarcode扩展

前言 https://www.cnblogs.com/niuben/p/19274540 由于这篇帖子的 php-zbarcode 扩展,不支持 php8 所以使用 https://github.com/micbox/php-zbarcode 来进行安装 下载代码 git clone https://github.com/micbox/php-…

庸者谋事,智者谋局

《孙子兵法》讲:“庸者谋事,智者谋局。” 庸者只会把目光定格在一件事上,在他们眼中世界是孤立的、片面的、静止的。 智者却能把单个的事件加上时间、空间的维度,全面系统地思考问题。 不谋一世者,不足谋一时;不…

热血体育竞技 赛场荣耀时刻

2025-11-27 17:53:28 热血体育竞技 赛场荣耀时刻|@YiNwUYu.cOm@||@XjZsGc.cN@||@CwAnBaN.cN@||@NbXwHl.cOm@||@MoMei88.cOm@||@DgNjLwL.cOm@||@SdPzHb.cOm@||@LeEdEnTeX.cOm@||@JiYeShIGaO.cOm.cN@||@KuIYiNlAi.cN@|

2025 年最新推荐液位计厂家排行榜:聚焦投入式 / 磁致伸缩 / 防爆 / 防水 / 浮球液位计优质企业

引言 在工业生产、水利工程、石油化工等关键领域,液位计的精准度与稳定性直接关系到生产安全、效率提升及资源优化。当前液位计市场品牌繁杂,既有技术滞后、精度不足的产品,也存在小品牌稳定性差、售后缺失的问题,…

奥运赛事激情对决 体育竞技热血启航

|@KePrInTiNg.cOm@||@JxRuNfEnGyy.cOm@||@ImEiLaObAn.cOm@||@HaOyAnWu.cOm@||@GaNsHiChUcHeNqi.cOm@||@QiQuWq.cOm@||@YaNhUiYuAn.cOm@||@CyJyJt.cN@||@DgHpSh.cOm@||@YiNwUYu.cOm@||@XjZsGc.cN@||@CwAnBaN.cN@||@NbXw…

2025 年传感器厂家最新推荐排行榜:磁致伸缩 / 防爆 / 液位等多类型产品权威测评与实力解析线性 / 矿用 / 直线 / 油缸位移传感器 / 液位传感器公司推荐

引言 当前传感器行业需求持续攀升,但品牌繁杂与标准缺失导致采购决策难度剧增。为此,结合国际传感技术协会(Sensors International)测评体系(Impact Factor 8.78,CiteScore 10.2)及产业联盟五维评分模型,开展权…

【相反数】暴力即可

暴力遍历+一点点剪枝,没什么好说的 #include<iostream> #include<vector> using namespace std;int N;int main(){cin >> N;vector<int> num;vector<bool> vis(N+3,false);for(int i =…

【JPCS出版 | 前五届均已见刊检索】第六届材料化学与复合材料国际学术会议(MCCM 2025)

第六届材料化学与复合材料国际学术会议(MCCM 2025)将于2025年12月12-14日在广州隆重召开。【支持线上参会,线上做口头报告,线上做海报展示】 【本届EI期刊合作,并延续JPCS同步收录,双出版,多种选择】 第六届材料…

synchronized(this) 用法详解

基本概念 synchronized(this) 是 Java 中的一种同步机制,通过对当前对象实例加锁来保证线程安全。当一个线程进入被 synchronized(this) 修饰的代码块时,会获取当前对象的锁,其他线程必须等待该线程释放锁后才能进入…

项目写交付文档,数据库文档生成

我们可以使用工具,快速生成数据库文档,地址是:https://gitee.com/dotnetchina/DBCHM/releases

2025年琉璃瓦厂家推荐排行榜:哪家好?哪家靠谱?选哪家?——基于 CNPP 榜单的对比评测

一、用户在搜这些词时,其实要解决什么决策问题? 典型检索词:“琉璃瓦厂家” “琉璃瓦厂家推荐” “琉璃瓦厂家排行榜” “琉璃瓦厂家哪家好” “琉璃瓦厂家选哪家” “琉璃瓦厂家哪家靠谱”背后的共同需求不是“看广…

Kafka在Spring Boot生态中的浅析与应用 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年11月成都电线电缆厂家最新推荐,高压电缆、中压电缆、低压电缆、铜芯电缆、铝芯电缆、企业综合服务能力与产品特色深度解析

随着西南地区基础设施建设持续升级,以及新能源、轨道交通等领域的快速发展,各类工程项目对线缆产品的品质要求与日俱增。用户在选购线缆产品时面临诸多考量——如何辨别企业综合实力、如何匹配项目需求的产品规格、如…

2025 年最新屏蔽泵厂家排行榜:高温 / 自吸 / 化工等多类型屏蔽泵最新推荐,助力企业精准选品立式 / 液下 / 多级 / 维修 / 低温 / 液化气屏蔽泵推荐

引言 当前,锂电新能源、新材料、煤化工、环保、制药等领域飞速发展,对实现无泄漏输送的屏蔽泵需求日益增长。但市场上屏蔽泵品牌繁杂,产品质量参差不齐,部分企业技术落后、设备陈旧,导致产品在高温、高压等特殊工…

NeurIPS 2025|让AI读懂第一视角的“内心独白”!浙大等联合突破性实现自我中心视频推理

NeurIPS 2025|让AI读懂第一视角的“内心独白”!浙大等联合突破性实现自我中心视频推理论文名称:EgoThinker: Unveiling Egocentric Reasoning with Spatio-Temporal CoT 发布时间:2025年10月28日 👉一键直达论文 …

实验5 MapReduce初级编程实践

实验步骤 (一)编程实现文件合并和去重操作 对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新的输出文件C。下面是输入文件和输出文件的一个样例供参考…

2025年燃气低氮热水锅炉加工厂权威推荐榜单:家庭燃气热水锅炉/立式卧式燃气热水锅炉/半吨燃气热水锅炉设备源头厂家精选

燃气低氮热水锅炉作为现代清洁供热系统的核心装备,其氮氧化物排放水平、热效率及运行稳定性直接关系到用户的环保合规性、运营成本与系统可靠性。随着"双碳"政策推进与环保标准的提升,市场对超低氮排放、高…

08.入门篇-Java程序运行原理

08.入门篇-Java程序运行原理8 Java程序运行原理———————————————————————————————————————————————————————————————————————————无敌小马…

rust关键字unsafe

一看到unsafe关键字,第一印象就是这代码危险的,还是别用了。其实呢,根据个人使用及理解,可以认为作为rust的一种行为扩展机制,胆子大一点做常人之不敢做的事。 在 Rust 中,unsafe 是一个特殊的关键字,它允许开发…