Linux中的yum和gcc/g++

news2024/11/20 1:33:46

一、快速认识yum(简单介绍)

在Linux中,我们也要进行工具/指令/程序、安装、检查、卸载等等,需要使用到yum

在Linux中安装软件的方式:

  1. 源代码安装——交叉编译的工作
  2. rpm包直接安装
  3. yum/apt-get

yum:yum是我们Linux预装的一个指令,用来搜索、下载、安装对应的软件

就比如,手机上应用商店——也是一个app,并且是厂商内置的。

总而言之,yum相当于Linux的应用商店!

二、快速的使用yum(三板斧)

  1. yum list | grep command
  2. yum install [-y] command(这里的-y可加可不加)
  3. yum remove command   

注意后面的两条语句需要root权限操作,或者加上sudo.


三、Linux编辑器-vim的使用

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

1、vim的基本概念

我们目前只需要掌握vim的三种模式,分别是命令模式、插入模式和底行模式。

  • 命令/正常/普通模式 :控制屏幕光标的移动,字符‘字或行的删除。(vim打开的时候,默认的模式)
  • 插入模式:只有在插入模式下,才可以做文字输入,该模式是我们后面用的最频繁的编辑模式
  • 底行模式:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。

想要回到命令模式,无脑Esc即可。

命令模式转到插入模式输入 o / i / a

命令模式转到底行模式输入 shift+; 也就是:

2、讨论常见模式——命令、底行

命令模式:

底行模式:

保存文件
「w」: 在冒号输入字母「w」就可以将文件保存起来
离开vim
「q」:按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。
「wq」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

!command :在不退出vim的前提下,执行操作

vs filename :文件替换,光标在哪一个界面,我们就正在编辑哪一个界面,底行也是一样。

CTRL + ww : 光标多终端切换

shift zz = ZZ : 保存并退出vim

批量化注释:

  1. ctrl v
  2. hjkl区域选择
  3. shift + i  = I
  4. //
  5. Esc

批量化去注释

  1. CTRL v
  2. hjkl 区域选择
  3. d

Linux编译器-gcc/g++使用

C语言建议使用gcc,当然也可以使用g++;但是C++语言只能使用g++编译器编译

一、程序的翻译过程

1、预处理(进行宏替换)

预处理功能主要包括宏定义、文件包含、条件编译、去注释等。
预处理指令是以#号开头的代码行。

所谓的头文件展开,本质是在预处理的时候,将头文件内容拷贝至源文件

实例: gcc –E hello.c –o hello.i

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

2、编译(生成汇编)

在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查
无误后,gcc 把代码翻译成汇编语言。
用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
实例: gcc –S hello.i –o hello.s

扩展:条件编译

用途1:动态裁剪

我们可以通过给编译器传递不同的宏值,来进行对代码的动态裁剪。

比如一个程序有两个版本,商业版和普通版,这两者的区别就是商业版有更多的功能。这时候需要我们用两份代码去调试吗?

如果用两份代码,费力费时间。

而我们采用传递不同的宏值去进行代码的动态裁剪即可用一份代码!

用途2:防止头文件被重复包含

也是通过条件编译去检查头文件是否重复包含,如果没有包含头文件,就执行下面的代码,如果已经包含头文件,下面的代码不去执行。

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

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

4、链接

在成功编译之后,就进入了链接阶段。
实例: gcc hello.o –o hello

函数库:

问题:

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

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

动静态库的比较:

动态库:(动态链接)

优点:比较节省资源,不会出现太多的重复代码

缺点:对库的依赖性比较强,一旦库丢失,所有使用这个库的程序都无法运行

静态库:(静态链接)

优点:不依赖库,同类型平台中都可以直接运行使用。

缺点:可执行程序体积比较大,比较浪费资源(资源磁盘、内存、网络等资源)

TIP:

当gcc编译时,系统自动会用动态链接!


扩展:语言和编译器的自举的过程

问:先有的语言,还是先有的编译器?

答案是先有的语言。

比如先创造了C语言,然后我们用低级语言(汇编代码)写一个能编译C语言的编译器,这样我们就可以写软件了,接着用这个编译器去写一个用C语言写的编译器即可。

上述过程就是语言和编译器的自举过程。

二、gcc选项

-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S 编译到汇编语言不进行汇编和链接
-c 编译到目标代码
-o 文件输出到 文件
-static 此选项对生成的文件采用静态链接
-g 生成调试信息。GNU 调试器可利用该信息

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

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

相关文章

在no branch上commmit后,再切换到其他分支,找不到no branch分支的修改怎么办?

解决办法 通过git reflog我们可以查看历史提交记录,这里的第二条提交(fbd3ea8)就是我在no branch上的提交。 再通过git checkout -b backup fbd3ea8,恢复到上次提交的状态,并且为其创建个分支backup,此时…

FTP可替代?传输替代方案应该需要具备哪些条件?

企业对数据传输的安全性、速度和稳定性的要求日益提高。传统的FTP虽然在早期广泛使用,但随着技术的发展和业务需求的增长,其局限性逐渐显现,迫切需要替代方案以满足现代企业的需求。 FTP的局限性主要表现在以下几个方面: 安全性不…

Postman,一个功能强大的API开发和测试工具

最近有小伙伴说在找 postman 的使用教程,案例等文章。 那么今天我就来写一个。 Postman 是一个功能强大的 API 开发和测试工具,它提供了丰富的功能,帮助开发人员更好地管理、测试和文档化 API。无论是单独开发还是团队协作,Postma…

一个数据人眼中的《上游思维》

最近读了《上游思维》这本书,很受启发,我想从一个数据人的角度来聊一聊我对这本书的读后感。上游思维本质上是帮助我们解决问题,我发现在解决问题相关的每个阶段:发现问题、找到解决问题的方法、解决问题的过程中、评估问题以及预…

【C++】简易二叉搜索树

目录 一、概念: 二、代码实现: 大致结构: 1、遍历: 2、insert 3、find 4、erase 三、总结: 一、概念: 二叉搜索树又称为二叉排序树,是一种具有特殊性质的二叉树,对于每一个节…

icloud里面的通讯录怎么全部导出,通讯录格式如何转换,简单!

随着科技的发展,我们的日常生活越来越离不开手机和各种应用程序。通讯录作为手机中最重要的功能之一,记录着我们的亲朋好友、同事和业务伙伴的联系方式。因此,定期备份通讯录变得尤为重要。iCloud作为苹果公司提供的一项云服务,可…

基于jenkins+docker实现CI/CD实践

项目简介 利用 Jenkins、Docker、SonarQube 和 Harbor 技术,搭建一个完整的 CI/CD 管道,实现持续集成、持续交付和持续部署的流程。通过自动化构建、测试、代码质量检查和容器化部署,将开发人员从繁琐的手动操作中解放出来,提高团…

求三个字符数组最大者(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <string.h>int main() {//初始化变量值&#xff1b;int i 0;char str[3][20];char string[20];//循环输入3个字符…

可以在手机端运行的大模型标杆:微软发布第三代Phi-3系列模型,评测结果超过同等参数规模水平,包含三个版本,最小38亿,最高140亿参数

本文原文来自DataLearnerAI官方网站&#xff1a; 可以在手机端运行的大模型标杆&#xff1a;微软发布第三代Phi-3系列模型&#xff0c;评测结果超过同等参数规模水平&#xff0c;包含三个版本&#xff0c;最小38亿&#xff0c;最高140亿参数 | 数据学习者官方网站(Datalearner…

React真的好难用

我发现React就像个宗教一样&#xff0c;网络上总有一群信徒。信徒&#xff1a;React天下第一&#xff0c;谁也不能说他不好。 网络上大佬对React的评价一般有几类&#xff1a; React跟Vue比就是手动档和自动档的区别&#xff0c;高手都开手动档。—— 就一个破打工的&#xf…

(待更)DRF: 序列化器、View、APIView、GenericAPIView、Mixin、ViewSet、ModelViewSet的源码解析

前言&#xff1a;还没有整理&#xff0c;后续有时间再整理&#xff0c;目前只是个人思路&#xff0c;文章较乱。 注意路径匹配的“/” 我们的url里面加了“/”&#xff0c;但是用apifox等非浏览器的工具发起请求时没有加“/”&#xff0c;而且还不是get请求&#xff0c;那么这…

【知识】pycolmap.Sift.extract的参数和返回格式

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;请不吝给个[点赞、收藏、关注]哦~ import pycolmap# 比较推荐的参数 options {"peak_threshold": 0.0066667,"edge_threshold": 10,"first_octave"…

基于Spring Boot的火车订票管理系统设计与实现

基于Spring Boot的火车订票管理系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 前台首页功能界面图&#xff0c;在系统首页可以查看…

python 函数作业 计算三角形的有效值s

题目&#xff1a; 计算半周长p&#xff0c;既p(abc)/2。 将p的值代入公式&#xff1a;计算出三角形的有效值。&#xff08;只能用python函数的方法求解&#xff09; 第一步先定义个函数&#xff1a; def isValid(side1,side2,side3) 第二步用if判断是否符合三角形边长准…

芯片尺寸封装(CSP)/晶圆级封装(WLP)/芯片尺寸晶圆级封装(CSWLP)

芯片尺寸封装&#xff08;CSP&#xff09;、晶圆级封装&#xff08;WLP&#xff09;、晶圆级芯片尺寸封装&#xff08;WLCSP&#xff09; 1.芯片尺寸封装&#xff08;CSP&#xff09;的定义是其尺寸不超过裸片尺寸的1.1倍。 2.晶圆级封装&#xff08;WLP&#xff09;是在晶圆…

AIGC——什么是人工智能生成内容

人工智能生成内容&#xff08;AIGC&#xff09;是当今数字时代的一个引人注目的前沿技术&#xff0c;它借助深度学习和自然语言处理等技术&#xff0c;使计算机系统具备了生成高质量文本、图像、音频等多媒体内容的能力。AIGC的出现不仅推动了信息技术的发展&#xff0c;也在多…

Linux搭建本地DNS服务器

目录 DNS进行域名解析的过程&#xff1a; 环境介绍&#xff1a; 环境准备&#xff1a; 1.安装bind 2.编辑主配 3.配置正向解析文件 4.测试&#xff1a; DNS进行域名解析的过程&#xff1a; 用户要访问www.baidu.com&#xff0c;会先找本机的host文件&#xff0c;再找本…

selenium 自动化测试课上实操指南2——乐视tv搜索

如果完成了实操1的同学&#xff0c;环境搭建已经ok&#xff0c;环境还没有好的同学请参考 实操1_百度搜索 为了大家顺利&#xff0c;我们还想按照实操1那样&#xff0c;先导入一个基本项目。在次基础上进行代码编写、 我们一起写写看。 1.打开乐视视频网页并最大化 如下图所…

深度学习从入门到精通——词向量介绍及应用

词向量介绍 词向量&#xff08;Word embedding&#xff09;&#xff0c;即把词语表示成实数向量。“好”的词向量能体现词语直接的相近关系。词向量已经被证明可以提高NLP任务的性能&#xff0c;例如语法分析和情感分析。词向量与词嵌入技术的提出是为了解决onehot的缺陷。它把…

【Yolov系列】Yolov5学习(一):大致框架

一、Yolov5网络结构 Yolov5特点&#xff1a; 合适于移动端部署&#xff0c;模型小&#xff0c;速度快 Yolov5骨干结构&#xff1a;CSPDarknet53网络Yolov5主要有Yolov5s、Yolov5m、Yolov5l、Yolov5x四个版本。这几个模型的结构基本一样&#xff0c;不同的是depth_multiple模型…