在 Centos7 下,使用 yum 安装高版本的 gcc/g++ 最简单:
yum -y install centos-release-scl
yum -y install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils
使用 scl enable devtoolset-11 bash
启用 devtoolset-11 软件集和,此时使用 g++ --version
以及 gcc --version
命令就会发现我们的 gcc g++ 已经完成了升级。
但是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 语法不能识别。
执行 /opt/rh/devtoolset-11
路径下的 eable 文件才是正确的写法,它不仅设置了编译器可执行文件的 PATH 环境变量,同样会设置标准库头文件、库文件等环境变量,具体完成的操作我们可以通过 vim /opt/rh/devtoolset-11/enable
查看