当前位置: 首页 > news >正文

Ubuntu升级Cmake、gcc、g++

背景

最近要安装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-9Alternative: /usr/bin/gcc-5
Priority: 20Alternative: /usr/bin/gcc-7
Priority: 40Alternative: /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-9Alternative: /usr/bin/gcc-5
Priority: 20Alternative: /usr/bin/gcc-7
Priority: 40Alternative: /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 mode1            /usr/bin/gcc-5   20        manual mode2            /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

相关文章:

Ubuntu升级Cmake、gcc、g++

背景 最近要安装llvm&#xff0c;我选择的是从源码安装&#xff0c;所以要使用Cmake进行构建项目。但是服务器上的Cmake、gcc、g的版本都太低了&#xff0c;不符合要求&#xff0c;所以要对此进行升级。在本博客中采用的升级方法不一定是最好的方法&#xff08;因为我也是参考…...

8月28日上课内容 第四章 MySQL备份与恢复

本章结构 前言&#xff1a;日志⭐⭐ MySQL 的日志默认保存位置为 /usr/local/mysql/data ##配置文件 vim /etc/my.cnf [mysqld] ##错误日志&#xff0c;用来记录当MySQL启动、停止或运行时发生的错误信息&#xff0c;默认已开启 log-error/usr/local/mysql/data/mysql_error.l…...

es字段查询加keyword和不加keyword的区别

在ES&#xff08;Elasticsearch&#xff09;中&#xff0c;查询字段名后面加上"keyword"和不加"keyword"有着不同的含义和用途。 当字段名后面加上"keyword"时&#xff0c;表示该字段是一个keyword类型的字段。Keyword类型的字段会将文本作为一…...

前端JavaScript将数据转换成JSON字符串以及将JSON字符串转换成对象的两个API

在前端 JavaScript 中&#xff0c;你可以使用 JSON.stringify() 方法将 JavaScript 数据转换成 JSON 字符串&#xff0c;以及使用 JSON.parse() 方法将 JSON 字符串转换成 JavaScript 对象。下面是这两个 API 的详细说明和示例&#xff1a; JSON.stringify()&#xff1a; 用于…...

Spring——Spring Boot基础

文章目录 第一个helloword项目新建 Spring Boot 项目Spring Boot 项目结构分析SpringBootApplication 注解分析新建一个 Controller大功告成,运行项目 简而言之&#xff0c;从本质上来说&#xff0c;Spring Boot 就是 Spring&#xff0c;它做了那些没有它你自己也会去做的 Spri…...

Python基础之基础语法(二)

Python基础之基础语法(二) 语言类型 静态语言 如&#xff1a;C C Java ina a 100 a 100 a abc # 不可以静态语言需要指定声明标识符的类型&#xff0c;之后不可以改变类型赋值。静态语言变异的时候要检查类型&#xff0c;编写源代码&#xff0c;编译时检查错误。 动态语…...

docker常见面试问题详解

在面试的时候&#xff0c;面试官常常会问一些问题&#xff1a; docker是什么&#xff0c;能做什么&#xff1f;docker和虚拟机的区别是什么呢&#xff1f;docker是用什么做隔离的&#xff1f;docke的网络类型&#xff1f;docker数据之间是如何通信的&#xff1f;docker的数据保…...

Auto-GPT 学习笔记

Auto-GPT 学习笔记 Auto-GPT 简介 Auto-GPT 是一个基于 GPT-4 的自主智能体实验项目。它展示了大规模语言模型的规划、记忆和工具使用能力。Auto-GPT 的目标是实现一个完全自主的 AI 代理。GitHub 仓库 Auto-GPT 核心模块 规划(Planning) 使用强化学习策略进行多跳思考。通…...

代码随想录 - Day30 - 修剪二叉树,转换二叉树 + 二叉树总结

代码随想录 - Day30 - 修剪二叉树&#xff0c;转换二叉树 二叉树总结 669. 修剪二叉搜索树 有点像是删除二叉搜索树的变形&#xff0c;改变了删除条件而已。 递归法&#xff1a; class Solution:def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> O…...

[音视频] sdl 渲染到外部创建的窗口上

API SDL_CreateWindowFrom # 在外部窗口上创建窗口 其他 api 调用&#xff0c;按照之前的 代码 ui.setupUi(this); sdl_width ui.label->width(); sdl_height ui.label->height(); SDL_Init(SDL_INIT_VIDEO); sdl_win SDL_CreateWindowFrom((void*)ui.label->wi…...

MongoDB之索引

大数据量使用全集合查询&#xff0c;这是非常影响性能的&#xff0c;而索引可以加快查询效率&#xff0c;提高性能&#xff0c;所以这方面的知识也是必不可少的。 查询分析 explain()可以帮助我们分析查询语句性能。 语法 db.collection.find(...).explain()案例及结果 案…...

Redis的介绍

Redis的架构介绍如下: 1. 概述 Redis是一个基于内存的高性能NoSQL键值数据库,支持网络访问和持久化特性。 2. 功能架构 Redis提供字符串、哈希、列表、集合、有序集合、位数组等多种数据结构,支持事务、Lua脚本、发布订阅、流水线等功能。 3. 技术架构 Redis使用单线程的…...

一文了解Docker的用法

一、什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。 容器是…...

netcat的使用

目录 netcat简介 nc的使用场景 nc实现通信 创建一个服务端 创建一个客户端 具体案例 环境 win10在具体路径下执行命令 win7在具体路径下执行命令 netcat文件传输 nc文件传输的利用 服务器等待接收文件 客户端向服务器发送文件 服务器向连接的客户端发送文件 客户…...

深度学习推荐系统(二)Deep Crossing及其在Criteo数据集上的应用

深度学习推荐系统(二)Deep Crossing及其在Criteo数据集上的应用 在2016年&#xff0c; 随着微软的Deep Crossing&#xff0c; 谷歌的Wide&Deep以及FNN、PNN等一大批优秀的深度学习模型被提出&#xff0c; 推荐系统全面进入了深度学习时代&#xff0c; 时至今日&#xff0c…...

前端常用 Vue3 项目组件大全

Vue.js 是一种流行的 JavaScript 前端框架&#xff0c;它简化了构建交互式的用户界面的过程。Vue3 是 Vue.js 的最新版本&#xff0c;引入了许多新的特性和改进。在 Vue3 中&#xff0c;组件是构建应用程序的核心部分&#xff0c;它们可以重用、组合和嵌套。下面是一些前端开发…...

javaee spring 静态代理

静态代理 package com.test.staticProxy;public interface IUsersService {public void insert(); }package com.test.staticProxy;//目标类 public class UsersService implements IUsersService {Overridepublic void insert() {System.out.println("添加用户");…...

Java 包装类和Arrays类(详细解释)

目录 包装类 作用介绍 包装类的特有功能 Arrays类 Arrays.fill() Arrays.toString() Arrays.sort() 升序排序 降序排序 Arrays.equals() Arrays.copyOf() Arrays.binarySearch() 包装类 作用介绍 包装类其实就是8种基本数据类型对应的引用类型。 基本数据类型引用…...

elementUi中的el-table表格的内容根据后端返回的数据用不同的颜色展示

效果图如下&#xff1a; 首先 首先&#xff1a;需要在表格行加入 <template slot-scope"{ row }"> </template>标签 <el-table-column prop"usable" align"center" label"状态" width"180" ><templ…...

在访问一个网页时弹出的浏览器窗口,如何用selenium 网页自动化解决?

相信大家在使用selenium做网页自动化时&#xff0c;会遇到如下这样的一个场景&#xff1a; 在你使用get访问某一个网址时&#xff0c;会在页面中弹出如上图所示的弹出框。 首先想到是利用Alert类来处理它。 然而&#xff0c;很不幸&#xff0c;Alert类处理的结果就是没有结果…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...