距离上次更新本文已经过去了 730 天,文章部分内容可能已经过时,请注意甄别

CentOS 7.6 升级 gcc/g++ 的方法,不一定适用于其他 linux 系统

1. 查看版本

plaintext
1
2
g++ -v
gcc -v

当前查看版本,发现是 4.8.5,这已经是 2015 年的旧版本了,对 c++11 的支持不是很完善,为了方便学习和编写新版本的代码,升级一下还是可以的

如果你的系统上没有 gcc/g++,则尝试用下面的方法安装

plaintext
1
yum install -y gcc gcc-c++

示例

plaintext
1
2
3
4
5
6
7
8
9
10
11
12
[root@bt-7274:~]# yum install -y gcc gcc-c++
Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

Repository epel is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* centos-sclo-rh: ftp.sjtu.edu.cn
* centos-sclo-sclo: ftp.sjtu.edu.cn
Package gcc-4.8.5-44.el7.x86_64 already installed and latest version
Package gcc-c++-4.8.5-44.el7.x86_64 already installed and latest version
Nothing to do

2. 升级

plaintext
1
yum list dev\*gcc

用这个命令查看可以安装的版本有哪些

image-20230131152231287

可以看到最新版本已经是 11 了,那我们就直接安装最新版本的吧

plaintext
1
yum install devtoolset-11-gcc devtoolset-11-gcc-c++
plaintext
1
2
3
4
5
6
7
Installed:
devtoolset-11-gcc.x86_64 0:11.2.1-9.1.el7 devtoolset-11-gcc-c++.x86_64 0:11.2.1-9.1.el7

Dependency Installed:
devtoolset-11-binutils.x86_64 0:2.36.1-1.el7.2 devtoolset-11-libstdc++-devel.x86_64 0:11.2.1-9.1.el7 devtoolset-11-runtime.x86_64 0:11.1-2.el7

Complete!

看到 complete 就代表安装 over 了

3. 生效

现在要做的就是让新安装的版本生效

plaintext
1
source /opt/rh/devtoolset-11/enable

image-20230131152404244

不过这样做,只能在当前 bash 生效,新建一个 bash 就会发现还是 4.8.5。要做的就是吧这个语句写入 bashrc 的配置文件中,让每次新建 bash 的时候自动执行一次就 OK 了

要修改的是 /etc/bashrc,强烈建议修改之前先备份一下

plaintext
1
cp /etc/bashrc ~/bashrc.bak

随后执行下面俩命令

plaintext
1
2
echo "source /opt/rh/devtoolset-11/enable" >> /etc/bashrc
source /etc/bashrc

现在就 OK 了,新建一个 bash,再 gcc -v,发现已经是新版本了

image-20230131152622618

4. 关于 man 失效问题

升级了版本后,可能导致 man 手册失效。这是因为 man 的环境变量被修改了

plaintext
1
2
# echo $MANPATH
/opt/rh/devtoolset-11/root/usr/share/man

如果你需要使用 man 命令,则还需要重新修改一下 MANPATH 环境变量

plaintext
1
export MANPATH=/usr/share/man

解决参考 man 什么都搜不了的解决方案