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

Centos7下升级gcc/g++版本(简单 + 避坑)

在 Centos7 下,使用 yum 安装高版本的 gcc/g++ 最简单:

yum -y install centos-release-scl
yum -y install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils
  • 需要安装哪个个版本的gcc/g++,就把数字替换成对应的版本号。例如上面代码中,我们下载了 gcc11 和 g++11
  • gcc版本与C++标准的对应关系可以参考gcc官网 >链接

使用 scl enable devtoolset-11 bash 启用 devtoolset-11 软件集和,此时使用 g++ --version 以及 gcc --version 命令就会发现我们的 gcc g++ 已经完成了升级。

image-20240109161021405

但是scl命令的作用只是暂时的,如果要长久生效,我们就需要写入到配置文件中:

echo "source /opt/rh/devtoolset-11/enable" >>/etc/profile

(注意:具体数字根据你下载的版本来)

写到这里我们的升级工作就完成了,但我写这篇博客就是想吐槽一下网络上常见的错误:试图通过替换 gcc/g++ 来实现永久生效。

mv /usr/bin/gcc /usr/bin/gcc-4.8.5sudo ln -s /opt/rh/devtoolset-10/root/bin/gcc /usr/bin/gccmv /usr/bin/g++ /usr/bin/g++-4.8.5sudo ln -s /opt/rh/devtoolset-10/root/bin/g++ /usr/bin/g++

试想一下,你的编译器确实是新版的,但是你的头文件和库文件不还都是原先老版本的吗,一些新版的C++语法自然就不会支持。我当初就被这种写法坑了,编译 redis-plus-plus 时就提示提示 c++17 语法不能识别。

image-20240109161857075

执行 /opt/rh/devtoolset-11 路径下的 eable 文件才是正确的写法,它不仅设置了编译器可执行文件的 PATH 环境变量,同样会设置标准库头文件、库文件等环境变量,具体完成的操作我们可以通过 vim /opt/rh/devtoolset-11/enable 查看

在这里插入图片描述在这里插入图片描述

  1. 向 PATH 环境变量中添加工具集中的编译器、调试器等工具的路径。
  2. 设置 LD_LIBRARY_PATH 环境变量,以便在运行程序时正确加载工具集中的库文件。
  3. 设置 MANPATH 环境变量,以便在使用 man 命令查看文档时能够正确显示工具集的文档。
  4. 设置 INFOPATH 环境变量,以便在使用 info 命令查看文档时能够正确显示工具集的文档。
  5. 置 PKG_CONFIG_PATH 环境变量,以便在编译过程中使用 pkg-config 工具时能够正确找到工具集中的库文件。
  6. 如果在执行命令之前已经设置了 CXX 或 CC 环境变量,则将这些变量设置为与工具集中对应的编译器路径。
http://www.lryc.cn/news/276986.html

相关文章:

  • PyTorch项目源码学习(1)
  • adb 使用的出现 adb server is out of date. killing
  • 数据结构之二叉搜索树(Binary Search Tree)
  • Spring Boot自定义启动Banner在线生成工具
  • Android Studio导入项目 下载gradle很慢或连接超时,提示:Read timed out---解决方法建议收藏!
  • 汽车标定技术(十五)--FETK如何帮助Aurix实现快速原型、标定测量功能(1)
  • linux项目部署(jdk,tomcat,mysql,nginx,redis)
  • Unity | 渡鸦避难所-6 | 有限状态机控制角色行为逻辑
  • 数据库参数 PGA_AGGREGATE_LIMIT 限制进程大小
  • 208.【2023年华为OD机试真题(C卷)】停车场车辆统计(贪心算法实现-JavaPythonC++JS实现)
  • JS 作用域和预解析
  • 各种锁的概述
  • 【docker笔记】Docker容器数据卷
  • 大前端nestjs入门教程系列(四):如何nestjs整合mysql数据库
  • Android studio环境配置
  • 017、使用包、单元包及模块来管理日渐复杂的项目
  • Git提交规范详解
  • 线程与UI操作
  • ELK企业级日志系统分析系统
  • 11.23 校招 实习 内推 面经
  • Python战机
  • 外包做了5个月,技术退步一大半了。。。
  • 设计模式的艺术P1基础—2.2 类与类的UML图示
  • PCB 的正片、负片那些事儿
  • QT应用篇:QT解析与生成XML文件的四种方式
  • Android 正圆
  • C#,入门教程(13)——字符(char)及字符串(string)的基础知识
  • Tracert 与 Ping 程序设计与实现(2024)
  • 浅谈接口自动化测试
  • Hyperledger Fabric 核心概念与组件