Ubuntu升级Cmake、gcc、g++

news2025/1/16 1:10:41

背景

最近要安装llvm,我选择的是从源码安装,所以要使用Cmake进行构建项目。但是服务器上的Cmake、gcc、g++的版本都太低了,不符合要求,所以要对此进行升级。在本博客中采用的升级方法不一定是最好的方法(因为我也是参考其他大佬的博客进行升级的),但是我亲测可行。

升级Cmake

1.去Cmake官网下载你想要安装的版本的Cmake文件,推荐使用wget下载。

wget https://cmake.org/files/v3.25/cmake-3.25.3.tar.gz

完成以后,你会发现有一个cmake-3.25.3.tar.gz压缩包。
注:我们使用wget下载的是源码包,下载以后还需要进行编译。另外一种方式是直接在官网下载已经编译好的Cmake压缩包,下载后不需要编译

2.解压。

tar -xvzf cmake-3.25.3.tar.gz

3.进入解压目录,输入以下指令。

chmod 777 ./configure  
./configure   

chmod 777 表明文件所有者、用户组、其他用户都有可读、可写、可执行权限。
./configure 表示运行该可执行文件。配置成功后显示:CMake has bootstrapped. Now run make。
如果出现错误信息Could not find OpenSSL…,执行sudo apt-get install libssl-dev安装即可。

4.编译

make

5.安装

sudo make install 

6.使用update-alternatives替换掉旧的Cmake版本。

sudo update-alternatives --install /usr/bin/cmake cmake xxxx/bin/cmake 1 --force

xxx代表你解压的cmke路径。

7.查看cmake版本。

cmake --version

接下来解释下update-alternatives是什么?
update-alternatives命令用于处理Linux系统中软件版本的切换,使其多版本共存。update-alternatives的管理目录是/etc/alternatives。

$ update-alternatives --help
用法:update-alternatives [<选项> ...] <命令>

命令:
  --install <链接> <名称> <路径> <优先级>
    [--slave <链接> <名称> <路径>] ...
                           在系统中加入一组候选项。
  --remove <名称> <路径>   从 <名称> 替换组中去除 <路径> 项。
  --remove-all <名称>      从替换系统中删除 <名称> 替换组。
  --auto <名称>            将 <名称> 的主链接切换到自动模式。
  --display <名称>         显示关于 <名称> 替换组的信息。
  --query <名称>           机器可读版的 --display <名称>.
  --list <名称>            列出 <名称> 替换组中所有的可用候选项。
  --get-selections         列出主要候选项名称以及它们的状态。
  --set-selections         从标准输入中读入候选项的状态。
  --config <名称>          列出 <名称> 替换组中的可选项,并就使用其中哪一个,征询用户的意见。
  --set <名称> <路径>      将 <路径> 设置为 <名称> 的候选项。
  --all                    对所有可选项一一调用 --config 命令。

<链接> 是指向 /etc/alternatives/<名称> 的符号链接。(/usr/bin/pager)
<名称> 是该链接替换组的主控名。(如 pager)
<路径> 是候选项目标文件的位置。(/usr/bin/less)
<优先级> 是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。
..........

比如我们想查询gcc都有哪些软连接,可以使用如下指令:

sudo update-alternatives --query gcc

输出为:

Name: gcc
Link: /usr/bin/gcc
Status: manual
Best: /usr/bin/gcc-9
Value: /usr/bin/gcc-9

Alternative: /usr/bin/gcc-5
Priority: 20

Alternative: /usr/bin/gcc-7
Priority: 40

Alternative: /usr/bin/gcc-9
Priority: 50

其他的参数大家可以自行尝试。

升级gcc、g++

本博客升级gcc和g++的方法是使用apt-get install 安装更高的版本,当然也可以使用下载源码编译的方式升级。

1.首先查看现有的gcc、g++版本,并添加相应的源

gcc --version
g++ --version
sudo add-apt-repository ppa:ubuntu-toolchain-r/test

2.更新软件源

sudo apt-get update

3.安装你想要安装的gcc、g++版本

sudo apt-get install gcc-xx g++-xx

这里要指明一点问题:我在添加ppa源的时候无法添加,好像是因为ppa源在国外,所以可以换成中科大源。
参考链接如下:http://t.csdn.cn/g7nsV
在这里我本来是想安装gcc-11的,但是它会显示 E: Unable to locate package gcc-11,所以只能降低版本,最后降到gcc-9才显示有这个安装包,可以成功安装。

4.切换到最新的gcc版本
在切换到最新的gcc版本前,我们可以查看系统中到底存在几个不同的gcc版本,使用如下指令:

sudo updatedb && sudo ldconfig
locate gcc | grep -E "/usr/bin/gcc-[0-9]"

在这里插入图片描述
可以看到我这里是有4个。然后我们现在要让gcc-9的优先级最高(也就是输入gcc --version,它显示的版本要是9)。
使用 sudo update-alternatives --query gcc查看gcc的各个优先级,输出如下:

Name: gcc
Link: /usr/bin/gcc
Status: manual
Best: /usr/bin/gcc-9
Value: /usr/bin/gcc-9

Alternative: /usr/bin/gcc-5
Priority: 20

Alternative: /usr/bin/gcc-7
Priority: 40

Alternative: /usr/bin/gcc-9
Priority: 50

然后用如下指令给gcc-9最高优先级:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50

这个时候使用gcc --version查看版本,如果显示的是还是以前的版本,则使用手动改变的方法,输入如下指令:

sudo update-alternatives --config g++

输出为

There are 3 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path            Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-9   50        auto mode
  1            /usr/bin/gcc-5   20        manual mode
  2            /usr/bin/gcc-7   40        manual mode
* 3            /usr/bin/gcc-9   50        manual mode

键入3回车即可。
这样就可以成功切换gcc的版本了,g++同样的方法,这里不再阐述。

参考链接

1.https://www.cnblogs.com/Maker-Liu/p/16550381.html
2.https://www.jianshu.com/p/4d27fa2dce86
3.https://blog.csdn.net/quxuexi/article/details/121501679

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

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

相关文章

EXCEL数据处理

1. 自定义数字格式 选中数字--右键--设置单元格格式--自定义--shang ↑ 2.条件格式 如果。。。。就。。。。 选中某列--开始--条件格式--突出显示--大于/小于/等于。。。--设置为&#xff08;可选自定义格式&#xff09; 选中区域--条件格式--清除规则--清除所选单元格的规…

外贸人看过来,这里是WhatsApp宝藏使用技巧!

如今从事外贸的宝子普遍都会用到WhatsApp这款全球即时聊天工具。其免费&#xff0c;且可以直接跟陌生人聊天&#xff0c;是一个跟海外客户建立联系的重要阵地。但是有些宝子刚接触WhatsApp&#xff0c;不知道怎么去使用&#xff0c;今天小S就整理出了几个宝藏使用技巧&#xff…

探讨C#、C++和Java这三门语言在嵌入式的地位

我理解对于初入嵌入式领域的担忧。你是想选择一款通用性最广的语言专心学习&#xff0c;但是不知如何选择&#xff0c;视频后方提供了免费的嵌入式学习资源&#xff0c;内容涵盖入门到进阶&#xff0c;需要的到后方免费获取。因为我也曾是一名计算机专业毕业生。通过一段时间的…

2023-08-29 衣品-甄别与筛选

摘要: 外在形象可以说是内在自我的具象化表现, 自我定位与自我认知的表现便是一个人的形象. 所以对于衣品的甄别, 在很大程度上是体验该衣服所表现出来与内在潜意识契合的地方. 明白了这一点, 那么在做甄别和筛选的时候就能明白很多东西. 本文一方面做一定程度的练习, 一方…

生态环境保护3D数字展厅提供了一个线上环保知识学习平台

在21世纪的今天&#xff0c;科技与环保的交汇点提供了无数令人兴奋的可能性。其中&#xff0c;生态环境保护3D数字展厅就是一个绝佳的例子。这个展厅以其独特的3D技术&#xff0c;为我们带来了一个全新的、互动的学习环境&#xff0c;让我们能够更直观地了解和理解我们的环境。…

架构师日记-软件工程里的组织文化 | 京东云技术团队

一 引言 本文是京东到家自动化测试体系建设过程中的一些回顾和总结&#xff0c;删减了部分系统设计与实践的章节&#xff0c;保留了组织与文化相关的内容&#xff0c;整理成文&#xff0c;以飨读者。 下面就以QA&#xff08;Quality Assurance&#xff09;的视角来探讨工作中经…

一文看懂java集合(图文详细)

java集合框架图 看图可知&#xff0c;主要分为两类&#xff1a;Collection 和 Map&#xff0c;Collection主要用于存储一组对象&#xff0c;Map用于存储键-值对。 对这二者再细分 Collection接口&#xff1a; Map接口 集合框架总结 一、Collection 接口的接口 对象的集合&a…

重要提醒!亚马逊卖家们需关注:Review政策发生重大变化

在电商领域&#xff0c;Review&#xff08;评价&#xff09;对卖家而言至关重要&#xff0c;是客户是否下单的核心考量之一。亚马逊的Review政策变化一直备受卖家关注&#xff0c;任何Review方面的动向都会引发卖家们的关切。近期&#xff0c;亚马逊对Review政策进行了调整&…

鸿鹄企业工程项目管理系统 Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统源代码

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…

ST SR5E1 22KW OBC 3KW DC DC Combo System 二合一车载充电器解决方案

ST SR5E1 22KW OBC & 3KW DC DC Combo System 二合一车载充电器解决方案 电动车内一般有两个不同电压等级的电池&#xff0c;高压电池用于驱动电机&#xff0c;低压电瓶用于车内电子设备供电&#xff0c;两个电池之间需要一个DCDC变换器来实现功率的流动&#xff0c;根据主…

springcloud-nacos简述

Spring Cloud alibaba: nacos服务注册中心&#xff0c;配置中心 服务注册中心 1.项目父工程添加springcloudalibaba依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><ve…

ZooKeeper与Paxos

Apache ZooKeeper是由Apache Hadoop的子项目发展而来&#xff0c;于2010年11月正式成为了Apache的顶级项目。ZooKeeper为分布式应用提供了高效且可靠的分布式协调服务&#xff0c;提供了诸如统一命名服务、配置管理和分布式锁等分布式的基础服务。在解决分布式数据一致性方面&a…

亿发浙江生产工厂信息化建设管理平台,实现生产智能化、数字化

在全球化、科技深刻变革的时代&#xff0c;浙江省信息化建设正迎来新的发展机遇。以物联网、人工智能大数据、为代表的新技术应用&#xff0c;为人类社会带来了智能、便捷&#xff0c;也标志着新一代信息化浪潮已经到来。特别是在生产型企业中&#xff0c;智能制造是生产型企业…

嵌入式Linux开发实操(十三):GPIO接口开发

从版本4.8开始,Linux内核引入了一个新的基于字符设备的用户空间API,用于管理和控制GPIO(通用输入/输出),在Linux内核4.8之前,在用户空间中管理GPIO的唯一接口是sysfs接口,pio通过/sys/class/gpio中的导出文件进行配置和控制,可以通过该接口执行的基本GPIO操作,比如: …

【论文】2102.DALL-E: Zero-Shot Text-to-Image Generation(文字生成各种各样充满想象图像的开端)

主要参考&#xff1a; openai官网&#xff1a;https://openai.com/blog/dall-e/ 2102.DALLE: Zero-Shot Text-to-Image Generation 2204.DALLE-2 &#xff1a; Hierarchical Text-Conditional Image Generation with CLIP Latents 论文资源网盘下载&#xff1a;https://pan.ba…

独立站在线聊天插件,打造24小时在线客服

独立站的每一个访客都是潜在客户。通过在线聊天&#xff0c;可以提升访客的信任&#xff0c;进一步转化为真实的客户。但是独立站管理者不可能每时每刻都盯着后台&#xff0c;等着客户来提问&#xff0c;然后回复客户。所以独立站拥有在线聊天的功能是有必要的。 而SaleSmartl…

QtConcurrent和QFuture的使用

在Qt中&#xff0c;有时候我们会遇到这样一种情况&#xff0c;需要执行一个很长时间的操作&#xff0c;这时候我们的主界面就会卡住。我们的通常做法就是把这个很长时间的操作扔到线程里去处理&#xff0c;可以使用标准库中的线程也可以使用QThread。 如果我们要在这个很长时间…

MySQL的共享锁和排他锁

锁定读 Locking Reads 有过编程语言并发学习经验的同学&#xff0c;应该都了解过读写锁的概念。读写锁主要是为了解决多读少写条件下&#xff0c;程序的并发性能问题。它的特点即是&#xff1a;如果一个线程持有了读锁&#xff0c;那么其他线程也是可以继续读取它锁定的数据&a…

PCIE WIFI与金手指转接设计

PCIE转接口设计&#xff1a; 金手指转接设计 类似的芯片的框图&#xff1a;

Python 利用Matplotlib制作初中时圆规画的图

背景 大家在初中时&#xff0c;开始学习圆相关的知识&#xff0c;涉及圆的半径、周长、面积 等等&#xff0c;那会每位同学基本都会买一套圆规、三角板&#xff0c;来辅助学习和做作业使用&#xff0c;这些学习工具在闲暇时光也被用来玩耍&#xff0c;偶然间就拿着圆规在纸上画…