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++ 已经完成了升级。

Centos7下升级gcc/g++版本(简单 + 避坑)_第1张图片

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

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

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

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

mv /usr/bin/gcc /usr/bin/gcc-4.8.5
 
sudo ln -s /opt/rh/devtoolset-10/root/bin/gcc /usr/bin/gcc
 
mv /usr/bin/g++ /usr/bin/g++-4.8.5
 
sudo 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 查看

Centos7下升级gcc/g++版本(简单 + 避坑)_第2张图片在这里插入图片描述

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

你可能感兴趣的:(【解决问题】,centos)