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版本嘛
尝试一
然后显示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
查看版本来进行验证
如果想要每次登录系统都用gcc9的话,需要写到.bashrc
文件中
1 2 echo 'source scl_source enable devtoolset-9' >> ~/.bashrc source ~/.bashrc