当前位置: 首页 > 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类处理的结果就是没有结果…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...