Linux相关概念和易错知识点(3)(yum、gcc、动静态库)

yum命令轻松升级到高版本gcc gcc 安装; devtoolset 阅读详情

目录

1.yum

(1)yum是什么?有何背景?

(2)yum在哪去下载我们要安装的软件?

(3)yum常见指令

①安装、搜索、卸载

②元数据缓存

③软件包缓存

④升级yum -y update 升级所有.rpm包同时,也升级软件和系统内核,但不会删除旧版本软件包yum -y upgrade 只升级所有.rpm包,不升级软件和系统内核,软件和内核保持原样,会删除原来的软件包

2.gcc、g++

(1)生成可执行程序

(2)预处理、编译、汇编、链接

3.动静态库

(1)动静态链接

(2)动态库

(3)静态库

(4)查询链接方式


1.yum

(1)yum是什么?有何背景?

Linux是一个开源系统,人们可以在此基础上进行一些开发。有人开发一个项目,希望给更多人使用,于是将它编译成一个软件包(不乏一些有趣的小软件),将这个软件包放到服务器上,我们可以直接去这个服务器上下载到自己的Linux里。yum就是Linux里面的应用商店。apt也是这种包管理器。

Linux中软件的常见安装方式:yum/apt(编译好的,直接安装),.rpm(下载安装包),源码安装(针对一些开源项目软件,将源码移植到自己的设备,自己编译成可执行程序)

这个存放数据包的云服务器在哪?像CentOS这种大公司就会搭建自己的官网和服务器,有人专门管理和维护。那钱从哪来呢?事实上,开源是一种商业模式。其它公司可以通过CentOS进行开发,与此同时使用该系统的公司会有各种援助、捐赠或者订阅,以获得企业级的技术支持和安全维护,而这笔钱又会用于CentOS和服务器等的维护。因为你在别人的基础上开发,它倒闭了你也受损。对于普通用户而言,这就是免费的,我们可以做出自己的软件上传到别人的服务器上而不需要花钱,别人用也不需要花钱。如此一来Linux社区活跃度提高,论坛数量增加,也会有越来越多的企业和优秀开发者看到这个系统。

并且像CentOS官方有详细文档说明,有自己的用户画像(用户是学生为主还是企业为主?CentOS企业居多,Ubantu学生居多,这也决定论坛里面讨论的主题),这些东西构成了操作系统的生态,yum就是操作系统生态的体现,它背后是无数开发者向往开源精神的结晶,这一切也与商业并行,如此才能稳定。

我们不仅仅要看到yum的来源,还要看到Linux操作系统本身,OS背后的生态,作为一个优秀的操作系统应该拥有的论坛、软件体系,像安卓开源也是这样,建立了很强大的生态优势。这也导致在开源软件面前很难实现后来居上,因为生态需要历史的积淀。

(2)yum在哪去下载我们要安装的软件?

yum(包管理器)是一个应用商店,这个应用商店肯定是要访问服务器的,软件也是在服务器上下载下来的。yum的下载链接在哪?Linux内部有配置文件(yum源,位于/etc/yum.repo),里面有大量链接,会自动根据软件名定位服务器,这些配置文件在我们安装Linux时就有了,只不过不同地方的Linux安装包默认的配置文件可能不同,有可能导向国外的服务器了。国内也有相应的云服务器,我们也可以自己换成国内的镜像网址(下载yum源后mv掉原来的,清理原来的配置文件,最后配置新的yum),了解流程即可。

(3)yum常见指令

①安装、搜索、卸载

yum -y install (name) 安装软件包,-y表示不经过确认直接下载。安装yum都是root安装,有的必要的安装目录只有root能访问
yum search (name) 搜索包含指定关键字的软件包,不一定每个字都相同才匹配

yum -y remove (name) 卸载指定的软件包,-y表示不经过确认直接卸载

yum list | grep (name) 可以查软件,先用list列出来的内容通过管道交给grep,grep将描述信息含有(name)的筛选出来

②元数据缓存

yum list 可以列出所有可安装的软件包,包括版本号等详细信息。

但yum源配置文件并不包含版本号等信息,第一次使用时会根据里面的URL到网站里获取信息版本号等信息,所以我们会发现第一次使用会等几秒,但是第二次使用就没这个问题了,因为这些软件信息会缓存到本地,这些软件的信息就叫元数据缓存。注意缓存的是信息而不是软件本身,元数据缓存只会让yum search (name)和yum list 更快相应。

在了解元数据缓存之后,我们自然希望能够管理它。由于yum list优先到本地找缓存信息,这就会导致长时间后本地缓存的数据不是最新的,我们需要通过yum makecache更新或者下载信息到本地的缓存。或者我们可以删除本地的元数据缓存,使用yum clean metadata。注意这个删除操作只会删除元数据缓存,已下载和已安装的软件不会受到任何影响。

③软件包缓存

当我们使用yum -y install (name) 安装软件包时,会保留一份安装包.rpm到系统指定位置,当第二次安装或者更新时就能更快,本质上也是和元数据缓存那样为了效率而出现的产物。当我们使用yum -y remove (name) 时会删除软件包,但不会删除下载到本地缓存中的安装包文件,第二次安装时就更快了。注意软件包.rpm和软件包缓存是不同概念,软件包是可执行程序,而缓存只是个备份,用来加速安装的。

我们可以使用yum clean packages来清理软件包缓存,也可以使用yumdownloader (name)来下载但不安装软件,注意主动下载的软件不在软件包缓存内,因为yumdownloader下载到指定或当前工作目录,而不是识别为缓存的目录下。

我们可以使用yum clean all来清理所有缓存信息。

④升级
yum -y update 升级所有.rpm包同时,也升级软件和系统内核,但不会删除旧版本软件包
yum -y upgrade 只升级所有.rpm包,不升级软件和系统内核,软件和内核保持原样,会删除原来的软件包

2.gcc、g++

(1)生成可执行程序

C和C++运行程序需要将.c或.cpp处理成可执行文件,gcc是C语言的编译器,g++是C++的编译器

使用gcc -o (dst) (src) 命令在什么选项都没加的情况下直接生成可执行程序,-o是生成对应目标文件的意思

值得注意的是Linux中可执行程序不需要加后缀,因为生成的是可执行文件,用户也有可执行权限,所以能够直接运行。而在Windows中,后缀标志着文件默认的打开方式,因此要有.exe才能识别为可执行程序,而在Linux中识别是在权限那一步进行的,后缀只能算作区分文件使用。

(2)预处理、编译、汇编、链接

C/C++生成可执行程序分为预处理、编译、汇编、链接四步,在Linux里对应下来的四步分别为

①gcc -E test.c -o test.i 预处理(宏替换),-E的意思是开始进行程序的处理,预处理完就停下来(预处理是清除或展开宏替换、头文件、注释等,处理完后还是C语言代码)。-o是形成目标文件的意思,后面跟目标文件名,当然也可以不写,默认生成的是文件名和源文件相同,后缀为.i的文件(后续所有操作也都可以默认生成文件名)

②gcc -S test.i -o test.s 编译(C语言代码生成汇编代码),-S开始进行程序的处理(可以从.c开始,也可以从.i开始,-S不会挑源文件,它只会管理目标文件的生成),编译完就停下来

③gcc -c test.c -o test.o 汇编(由汇编代码生成机器可识别的二进制代码),-c意味着汇编完成就停下来(源文件不限)。.o文件是可重定位的二进制目标文件,虽然是二进制文件,但执行不了,执行一个可执行文件需要和系统的标准库进行定位,因此它并不是可执行文件。

④gcc -o test test.o 链接(生成可执行文件或库文件),.o文件和标准库进行关联,构建可执行程序,我们可以使用./(dst)来运行程序

3.动静态库

(1)动静态链接

我们写代码时都会使用头文件,调用的头文件在include这个目录里面,里面包括stdio.h等所有可使用<>包含的头文件,stdio.h里面并不存在函数的实现,但是却有很多声明,包括我们使用的函数printf、scanf等,具体函数实现又是在另外的函数库文件里面的。

当生成可执行程序时,预处理阶段我们包含的头文件声明会被展开,但是就像我前面说的那样,里面没有函数实现而只有声明,在链接时会定位到对应的库函数文件,找到函数。这个时候就有处理上的不同了,一种是将函数的实现拷贝进我们即将生成的可执行程序(静态链接),另一种是拿到这个函数实现的指针,在执行程序时来调用(动态链接)。

我们可以使用-static来告诉编译器我们使用静态链接,如gcc -o test test.c -static,注意静态链接的选项要在链接阶段加才有意义

(2)动态库

动静态库是指库函数文件,就上面所指的库函数具体实现的文件。其中一种叫做动态库,当使用动态链接时会匹配动态库.so(.so后面可能还跟版本号,如.so.60,在Windows中动态库后缀一般是.dll),这个时候生成的可执行程序在调用库函数时就会到对应文件中找。注意只要没有指定静态链接,都只会进行动态链接

优点:拷贝函数地址节省资源,可执行程序体积比较小,执行程序时内存中存储一份库文件代码

缺点:如果动态库受损,程序根本无法执行,可执行程序对动态库依赖很高

我们接触到的命令很多都是用C语言写的并使用动态链接(usr/bin目录下)

(3)静态库

当我们指定选项使用静态链接时,就会匹配静态库.a(注意Linux里默认没有安装静态库,指定选项后如果找不到静态库就报错)

优点:把静态库里面要调用的函数具体内容也拷贝过来了,可执行程序里面就有实现,不需要其它库文件就能运行

缺点:比较浪费,可执行程序体积大大增加且代码重复,执行程序时内存中存储多分相同文件代码

(4)查询链接方式

file (name) 查询文件类型,会根据文件里面的具体内容识别为文本、可执行程序等,识别为可执行文件时还能看到链接方式(dynamically linked动态链接,statically linked静态链接)。file还可以识别目录,如果识别成目录会告诉我们

ldd (name) 查询可执行文件动态链接的文件,注意ldd的对象不能是目录或普通文件,也不能是静态可执行文件,它面向的对象仅仅是动态链接的可执行文件

stat (name) 可查询任何文件和目录的属性信息(修改时间、大小、inode等)
 

CentOS7安装指定版本gcc 一、使用yum安装默认gcc 因为编译安装gcc,是需要用gcc编译的,所以首先需要安装默认gcc yum install gcc yum install gcc-c++ 如果没有yum源,可以先配置阿里源 cd /etc/yum.repo.d/ mv CentOS-Base.repo CentOS-Base.repo.bak wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 重新加载yum源 yum clean 阅读详情

相关推荐

【Linux】Linux工具篇(yum、vim、gcc/g++、gdb、Makefile、git)

Linux环境基础开发工具yum、vim、gcc/g++、gdb、Makefile、git的介绍和使用

不 良的博客 2426

yum安装gcc

  如果服务器是自己的,并且机器就在身边,那什么都不用说了,缺少gcc顶多就是重新放入安装盘,把开发工具包安装上。但是如果是租的服务器,托管服务 方那帮人又搞不懂你说的啥子gcc,要安装gcc实在是太麻烦了。你得去找gcc相关的包,版本号还得必须对应上,否则不兼容。最近给一个朋友装gcc, 着实头疼了一把。后来发现yum这个好东西,只需要执行一个命令,所有的烦恼都解除了。       朋友的系统...

weixin_33929309的博客 1041

yum安装gcc,gdb,gcc及vim配置

安装首先需要查看自己的系统有没有安装以上软件,使用which命令; 可以看到我的系统安装了以上软件,那么如何安装呢: 首先了解yum: Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所

mxrrr_sunshine的博客 2526

[Linux打怪升级之路]-yun安装和gcc的使用

本期学习目标:学习yum的基础操作,用gcc编写在vim中写好的代码,学会如何编写makefile文件,用make指令编程。

分享技术 8145

别再只仿真原理图了!用ADS做微带功分器,版图仿真这一步才是关键

本文深入探讨了使用ADS进行微带功分器设计时版图仿真的重要性,指出原理图仿真与版图仿真的本质差异及其对性能的影响。通过详细分析版图效应、关键设置和优化策略,帮助工程师避免常见陷阱,提升设计效率和准确性。文章特别强调了版图仿真在确保微波电路性能中的关键作用。

weixin_42561476的博客 412

星座SAR动目标检测(GMTI)

参考代码 星座SAR动目标检测 www.youwenfan.com/contentcsg/52399.html。

feifeigo123的博客 549

centos7使用yum安装gcc8

yum升级gcc工具链

nangonghen的博客 5922

OpenHarmony 5.1 RK3568 开发板烧录:从源码编译到镜像写入的 6 步实战

本文详细解析了OpenHarmony 5.1在RK3568开发板上的全链路开发流程,包括环境搭建、源码编译、镜像烧录等6个关键步骤。通过实战指南和避坑技巧,帮助开发者快速掌握OpenHarmony系统的烧录与定制能力,提升物联网设备开发效率。

weixin_33722405的博客 343

Linux中的yum和gcc/g++

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

可涵的博客 2019

CoaXPress协议入门(1)---- CXP测试套件

CoaXPress (简称CXP)是指一种采用同轴线缆进行互联的相机数据传输标准,主要用于替代之前的Camera Link协议,常见于科学相机、工业相机、医学图像、航空防务等场景。CXP是一个非对称的高速点对点串行传输协议,主要用于传输视频和静态图像,线缆多使用单条或多条同轴电缆。CXP易于集成,可以获得灵活可靠的性能,通过使用标准的同轴线缆,比如RG59 和 RG6规格(推荐使用RG6),并且图像、控制通讯、触发、电源都可以使用同一条线缆。

素手挽剑 9512

PLC1200使用CB1241RS485通讯模块做从站进行Modbus Rtu通信

添加新设备(PLC)->设备和网络管理->点击PLC->看到硬件目录选择通信板->点到点->CB1241(RS485)->看到6ES7241-1CH30-1XB0选择添加,如图。指向Modbus保持寄存器数据块的指针 我这里指向了自定义的DB块数据中一个INT数组。在通信->通信处理模块->MODBUS(选择不带RTU的通信指令块)注意:接线时,TRA接485调试模块的B- TRB接调试模块的A+组态后的硬件标识符 270 对应自己组态后自动生成的。1:事务完成,且无任何错误。波特率对应自己使用的。

swmyaopeng的博客 2万+

深度解析Linux中的编译器gcc/g++

gcc只用来编译C语言g++用来编译C/C++程序的翻译步骤经历四个过程的1、预处理(进行宏替换/去注释/条件编译/头文件展开等)这个-E的意思是从现在开始,进行程序的翻译,一但预处理做完了,就停下来那么这里的code.i保存的是预处理之后的结果我们这里的-o选项就是指明了我们的生成文件的名称了那么我们将这个code.i文件和原始的code.c进行对比下对比发现我们的源文件有24行,预处理结算的代码有800多行我们在这个阶段进行了进行宏替换/去注释/条件编译/头文件展开等等操作。

2301_80863610的博客 2792

MATPOWER的安装详细教程

MATPOWER的安装包实际为一个程序包,安装教程很简单,详见本文。

半个月亮Zz的博客 3万+

【Linux】Linux编译器-g++、gcc、动静态库

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

Become Mad的博客 1739

SAP RAP 校验全流程:从 EML 读取到消息上屏与阻止落库

本文系统梳理了 SAP ABAP RAP 中的校验流程(The Validation Process),结合 Airline/Connection 案例,详细讲解了三类核心校验:语义键唯一性、外键有效性和字段间一致性。文章覆盖了 EML 的 READ ENTITIES 操作、reported-* 与 failed-* 结构的使用方法、消息创建与字段绑定技巧,以及处理草稿数据时的 UNION 查询策略。通过代码示例演示了如何实现校验逻辑、生成错误消息并阻止无效数据持久化,同时提供了常见问题的排查建议。全文注重

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 333

手把手教你学Simulink--基础微电网场景实例:基于Simulink的混合交直流微电网架构仿真

本文基于Simulink构建混合交直流微电网仿真模型,通过交流子网(风电+交流负荷)和直流子网(光伏+储能+直流负荷)的协同控制,实现系统效率提升8.5%。重点介绍了混合架构原理、下垂控制策略及Simulink建模方法,包括核心模块实现、协调控制器代码和仿真参数设置。通过三种工况测试验证了系统性能:功率转移响应时间<0.5s,电压波动<5%,显著优于传统独立子网架构。文章还提供了进阶优化方向和完整代码清单,为微电网仿真研究提供实用参考。

MHD0815的博客 129

【Linux】--- 基础开发工具之yum/apt、vim、gcc/g++的使用

当用户想下载软件或工具时,都需要到特定位置进行下载,比如你在手机上下载app,需要到对应的应用商城下载。类似的,在Linux系统下也有下载的需求,通常来说下载方式主要有以下几种:1.源代码安装:下载程序的源码,进行编译得到可执行程序之后使用,非常不方便。2.rpm包安装:将源码提前在各种不同环境下编译好,形成一种压缩包叫rpm包,直接下载可执行程序就能安装好,实际上就是把可执行程序拷贝到指定路径下。但是主要可能会存在软件之间依赖问题,比如还需要你安装其他软件,额外的库之类的。3.yum/apt安装。

2301_79448270的博客 2057

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Linux】yum、vim、gcc使用(超详细)

Linux中常见的软件安装方式 --------- 下载&&安装a、yum/aptb、rpm安装包安装c、源码安装。因为我们的vim操作界面过于简单,编写程序时没有基本的首行缩进,自动补齐等Windows编译器都有的功能,使用起来及其不方便; 可以在家目录下面的.vimrc文件中配置

weixin_74116463的博客 1556

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Linux】yum、vim、gcc/g++

1.在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.2.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.3.软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系.

Lehjy的博客 1147

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Linux系统vim,gcc,g++工具使用及环境配置,动静态库的概念及使用

vim编辑器的使用方法及其环境配置,gcc/g++编译器的使用,程序的执行过程,动静态库的概念及静态库的安装方法。

qq_74276498的博客 1709

yum如何安装特定版本的gcc_Linux用yum命令安装gcc

1、查看下CentOS系统有没有安装GCC与G++$ gcc -v或 $ rpm -q gcc或 $ yum info gcc三者择其一即可,有最好,没有就需要重新安装,此处安装取yum命令,只因rpm无法解决软件包的依赖关系,而yum会自动查找软件的相关依赖包,自动下载安装2、执行命令(预防万一用root用户执行)$ yum-yinstallgcc若提示需要root权限代表...

weixin_39959192的博客 3534

yum如何安装特定版本的gcc_yum安装gcc

最近用vmware刚刚重装了一个linux虚拟机,装完之后才发现里面竟然没装gcc,带着郁闷的心情查了很多资料。很多人都说自己安装的话很难,如果用yum这个工具就好一点,后来就真的查到了这么一篇文章是关于用yum安装gcc的,先说下我虚拟机的简单配置Red Hat Enterprise Linux 5内核:2.6.18-128.el5以下文章是我主要参考的内容该文章出处:http://space....

weixin_36424234的博客 4099

linux中使用yum安装gcc

阿鲤在学习Linux时遇到了一个 问题,那就是Linux上没有安装gcc, 而在linux上,gcc是一个很重要的c编译器。因为linux的源码包必须通过编译才能使用。如果没有gcc的话,就很难办咯。 所以阿鲤在这向大家分享以下自己安装gcc的过程 在这之前,需要先做好以下工作 1:确保网络连接正常; 2:做好root权限(如果没有root,输入su ,回车,密码即可);、 下来正式介绍安装gcc...

belongHWL的博客 2369

在linux中GCC、Yum 与 Apt - get 的区别

GCC(GNU Compiler Collection)即 GNU 编译器套件,它本质上是一个编译器。最初,GCC 主要是作为 C 语言的编译器,随着不断发展,它已经支持多种编程语言,如 C++、Objective - C、Fortran、Java、Go 等。GCC 的主要任务是将高级语言编写的源代码转换为机器可执行的目标代码。Yum(Yellowdog Updater, Modified)是一种在基于 RPM 包管理的 Linux 发行版(如 CentOS、RHEL 等)上使用的软件包管理器。

m0_67544876的博客 946

linux下使用YUM安装GCC、gcc-c++

在安装服务器的时候图kuaijie

飞翔吧胖子的专栏 2万+

Linux---(五)三大工具yum、vim、gcc/g++

类似于手机上的软件商店或者应用管家。🎗️应用商店中的特定的App没有被我安装的时候,在哪里?在服务器端。🎗️安装软件的本质是下载和安装🎗️应用商店实质是一种客户端软件🎗️🎗️评判一款操作系统好或不好的标准:每一款操作系统都匹配上它的社区、官方文档、配套软件,叫做对应的生态。

qq_66238381的博客 8717
上一篇: Linux相关概念和易错知识点(2)(用户、文件和目录、inode、权限)
下一篇: Linux相关概念和易错知识点(4)(自举、vim)
-SGlow-
博客等级 码龄3年 1513粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值