0%

Centos7更新gcc

Centos7更新gcc

问题的出现?

我在编译Python3.9.2时出现如下报错导致编译失败

1
2
3
4
5
6
7
8
9
10
11
12
Could not import runpy module
Traceback (most recent call last):
File "/home/work/zh/Python-3.9.2/Lib/runpy.py", line 15, in <module>
import importlib.util
File "/home/work/zh/Python-3.9.2/Lib/importlib/util.py", line 2, in <module>
from . import abc
File "/home/work/zh/Python-3.9.2/Lib/importlib/abc.py", line 17, in <module>
from typing import Protocol, runtime_checkable
File "/home/work/zh/Python-3.9.2/Lib/typing.py", line 21, in <module>
import collections
SystemError: <built-in function compile> returned NULL without setting an error
generate-posix-vars failed

去查了一下说可能是gcc版本过低导致的,Python3.9.2最少也要使用gcc5以上,最好是gcc8以上,而我的版本是4.8.5,本来想的挺简单的,就更一下gcc版本嘛

尝试一

1
sudo yum install gcc

然后显示4.8.5已是最新版本,我这是假的yum吗?

尝试二

那我安装整体工具包呢?

1
sudo yum groupinstall "Development Tools"

版本依然没变。

尝试三

更新下yum?

1
2
3
sudo yum update
# 然后在进行安装gcc
sudo yum install gcc

版本依然没变。

尝试四

好吧,那我指定版本总行了吧,我下载个9的

1
sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

显示没有软件包

查找原因

通过查找网上的资料说是因为Centos7不维护导致的无法下载最新的gcc版本,官方没有的话,我去镜像下载总有的吧。那我把地址修改为阿里云的地址吧

1
2
3
4
5
6
7
# 切到yum配置的目录下
cd /etc/yum.repos.d
# 备份下原来的配置
mv CentOS-Base.repo CentOS-Base.repo.backup
# 下载阿里云的配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

根据网上的操作

1
2
3
4
5
6
7
8
#清理 yum 缓存
yum clean all
#重新生成 yum 元数据
yum makecache
# 安装 SCL 软件源
sudo yum install centos-release-scl
# 安装gcc9
sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

还是失败的,直接报Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64,这是地址不对吧。我去找一下发现CentOS-SCLo-scl-rh.repo配置里的baseurl有这个,那我把CentOS-SCLo-scl.repo和CentOS-SCLo-scl-rh.repo也备份下,然后删掉

1
2
3
4
5
6
# 备份
mv CentOS-SCLo-scl.repo CentOS-SCLo-scl.repo.backup
mv CentOS-SCLo-scl-rh.repo CentOS-SCLo-scl.repo.backup
#删除
rm CentOS-SCLo-scl.repo
rm CentOS-SCLo-scl-rh.repo

再来一次

1
2
3
4
5
6
7
8
#清理 yum 缓存
yum clean all
#重新生成 yum 元数据
yum makecache
# 安装 SCL 软件源
sudo yum install centos-release-scl
# 安装gcc9
sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

还是一样的错误,奇怪,我都删了的,怎么回事

发现有坑

查看配置发现两个文件又回来了

1
2
# 安装 SCL 软件源
sudo yum install centos-release-scl

这个语句会在 /etc/yum.repos.d 目录下会出现 CentOS-SCLo-scl.repo 和 CentOS-SCLo-scl-rh.repo 两个文件,安装后源默认启用。

那既然这样的话,那我把这两个配置的baseurl也改成阿里云的吧

CentOS-SCLo-scl.repo文件修改

修改baseurl

1
2
3
4
5
6
7
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-sclo
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
CentOS-SCLo-scl-rh.repo 文件修改

修改baseurl

1
2
3
4
5
6
7
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
刷新缓存
1
2
3
4
# 查看仓库列表,如果发现没有scl-rh和scl这俩的话,再执行一遍 sudo yum install centos-release-scl
sudo yum repolist
sudo yum clean all
sudo yum makecache

再去安装gcc

1
2
# 安装gcc9
sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

终于安装成功了

安装完成后

激活环境

1
scl enable devtoolset-9 bash

查看版本来进行验证

1
gcc --version

如果想要每次登录系统都用gcc9的话,需要写到.bashrc文件中

1
2
echo 'source scl_source enable devtoolset-9' >> ~/.bashrc
source ~/.bashrc

欢迎关注我的其它发布渠道