最近装在centos上装一个工具后,运行部分python代码会报错: OSError: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /home/data/Public_tools/anaconda3/envs/pytorch/lib/python3.8/site-packages/torch_spline_conv/_basis_cuda.so)
。百度一堆解决方法,经过测试,找到一个最接近解决问题的博客:Centos 7 升级 Glibc-2.28。但是在实操过程中遇到了两个问题。一个是升级gcc失败,另一个是通过 make 安装glibc2.28导致系统崩溃。
经过一番操作最终完全来了系统修复,并成功升级到glibc-2.28,python代码正常运行。分享如下:
GLIBC是向下兼容的,安装高版本的同时会同时安装低版本。因此,我这里选择安装GLIBC_2.28,参照:Centos 7 升级 Glibc-2.28。
# 下载并解压安装包
$ wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
$ tar -xzvf glibc-2.28.tar.gz
$ cd glibc-2.28
# 创建临时文件
$ mkdir build && cd build
# 配置环境
$ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
# 安装(此步可能会导致系统错误,建议先看完本文再执行)
$ make
$ make install
# 查询安装结果
$ strings /lib64/libc.so.6 | grep GLIBC
在配置环境时,大概率会报编译工具过旧 These critical programs are missing or too old: make compiler,需要升级gcc和make。这些用devtoolset-8-gcc来安装gcc8,参照:如何使用devtoolset-8-gcc安装gcc8
升级gcc (使用devtoolset-8-gcc安装gcc8)
# 安装devtoolset-8-gcc
$ yum install centos-release-scl
$ yum install devtoolset-8
$ scl enable devtoolset-8 -- bash
# 启用工具
$ source /opt/rh/devtoolset-8/enable
# 安装GCC-8
$ yum install -y devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
# 设置环境变量
$ echo "source /opt/rh/devtoolset-8/enable" >> /etc/profile
$ source /etc/profile
升级make
# 下载并解压安装包
$ wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz
$ tar -xzvf make-4.3.tar.gz
$ cd make-4.3/
# 安装到指定目录
$ ./configure --prefix=/usr/local/make
$ make
$ make install
# 创建软链接
$ cd /usr/bin/
$ mv make make.bak # backup
$ ln -sv /usr/local/make/bin/make /usr/bin/make
返回glibc-2.28目录,继续配置环境。执行make install时导致系统错误,导致ls, df, vim等一系列命令无法执行,链ssh都无法使用,导致不能重新登录服务器,因此,千万不要退出重新登录或是重启服务器,会崩掉的!!!
出现错误的原因是,glibc升级时 /usr/bli64目录中的链接没有更新完全,导致各个链接对应不上,系统出现故障,参照: https://blog.youkuaiyun.com/fei321321/article/details/100022115。