CentOS 7升级GCC
正文开始@Assassin
目录:
我们在centos下默认的gcc版本是gcc4.8.5,版本比较低,默认是支持编译c++98的,若在C++程序中直接使用到c++11的特性,则会报错。
解决方案: 在编译时加上-std=c++11
即可,如g++ test.cpp -o run -std=c++11
在bash下直接下载 :
yum install -y gcc gcc-c++
查看一下版本号:
gcc --version
g++ --version
基本执行步骤:
1. 切换用户:
输入以下命令行切换到root用户,此时需要输入你对应的root密码
su - root
如下图所示:
2. 安装centos-release-scl:
sudo yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-rh-2-3.el7.centos.noarch.rpm
sudo yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-2-3.el7.centos.noarch.rpm
3. 安装devtoolset:
这里需要注意一下,如果想安装7.版本的,就改成devtoolset-7-gcc
,以此类推
sudo yum install devtoolset-9-gcc-c++
4. 激活对应的devtoolset:
按理来说你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本
scl enable devtoolset-9 bash
此条命令行也同样适用
source /opt/rh/devtoolset-9/enable
5. 查看gcc版本号:
gcc --version
g++ --version
6. 一些issue:
注意:这条scl enable devtoolset-9 bash
激活命令只对本次会话有效,重启会话或者切换用户后还是会变回原来的4.8.5版本,因为安装的devtoolset
是在/opt/rh
目录下的,如图所示:
每个版本的目录下面都有个enable文件:
如果需要启用某个版本,只需要执行命令行:
source ./enable
所以要想切换到某个版本,只需要执行:
source /opt/rh/devtoolset-*/enable
可以将对应版本的切换命令写个shell脚本放在配置了环境变量的目录下,需要时随时切换,或者开机自启。但是经过我自己的实践,不推荐上述方法。
最直截了当的方法是直接替换旧版本的gcc
旧版本gcc运行的在
/usr/bin/gcc
,所以将该目录下的gcc/g++
替换为安装的新版本gcc软连接,省去了每次都要enable,简洁明了
依次执行以下命令:
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-9/root/bin/gcc /usr/bin/gcc
现在就算是永久性地启动指定版本的gcc,这种方式适用于长期使用该版本进行编译,切换bash依然有效
切换到Assassin用户查看一下:
[root@Ninghai ~]# su - Assassin
Last login: Fri Nov 26 22:20:43 CST 2021 from 182.118.236.53 on pts/1
[Assassin@Ninghai ~]$ g++ --version
g++ (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
到这里就ok了~~