我在我的 CentOS 机器上尝试了一个 python 应用程序,它给出了以下错误:
ImportError: /usr/lib64/libc.so.6: version `GLIBC_2.18' not found (required by /tmp/_MEI2BYIr4/libstdc++.so.6)
我一直想升级 GLIBC,但读过一些论坛后,我觉得这可能会破坏系统。你知道还有其他方法吗?
谢谢
答案1
检查是否确实需要
首先检查 python 应用程序,因为它可能已过期,并且可能误读了版本glibc
。CentOS 显示基本版本已安装,并已打补丁以跟上变化,这可能只是修复代码中正在寻找的版本作为快速修复的情况,但如果应用程序正在积极开发中,您需要让开发人员知道或自己 fork 它(如果可以的话)。
CentOS 7 的最新版本glibc
应该是2.17-196.el7_4.2
如果需要,可以使用容器
如果绝对有必要运行此应用程序,官方的 RHEL 方法将是容器化,但您仍然需要提供一个可运行的 glibc,而这在普通的 CentOS 7 中是不可能的。
作为最后的手段,安装glibc
在非标准位置
如果这不可行,并且作为最后的手段,可以安装glibc
比 2.18 更新的版本,因为它已经有 9 年的历史了,并且glibc
已经针对几个漏洞进行了更新,而且我不确定它是否可以使用make
CentOS 7 中的版本构建,但任何较新的版本都应该按如下方式工作:
- 这可能会影响你的计算机的功能,因此请确保你知道自己在做什么
glibc
您可以在服务器上的其他地方构建所需的版本,并将其添加到LD_LIBRARY_PATH
应用程序中。请注意,这只能针对应用程序执行。
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxvf glibc-2.18.tar.gz
cd glibc-2.18
mkdir build
cd build
../configure --prefix=/opt/glibc-2.18
make -j4
sudo make install
然后运行二进制文件,你需要使用它patchelf
来更新它的解释器
patchelf --set-interpreter /opt/glibc-2.18/lib/ld-linux-x86-64.so.2 program_you_are_running
你需要让它找到新的 glibc 库,方法是
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/glibc-2.18/lib
或者您可以使用patchelf
来更新二进制文件的 rpath(您可以将其与上一个pathelf
命令结合使用)
patchelf --set-rpath /opt/glibc-2.18/lib:/usr/lib64 program_you_are_running
如果您进行更改,LD_LIBRARY_PATH
请不要将其导出到整个系统,因为所有未修改的二进制文件patchelf
都会出现段错误。
/opt
是安装第三方应用程序和库的标准位置,但您可以使用远离系统路径的任何路径。
答案2
最后,我不需要升级 GLIBC。gdc-client
我通过 R 下载的工具似乎是针对 Ubuntu 而不是 CentOS 的,尽管我在 CentOS 7 上进行了升级。然后我下载了适用于 CentOS 的 gdc-client,它运行良好。
答案3
在 CentOS 7 上,我将/usr/lib64
文件夹包含rpath
如下内容
patchelf --set-interpreter /opt/glibc-2.18/lib/ld-linux-x86-64.so.2 --set-rpath /opt/glibc-2.18/lib:/usr/lib64 pydio-agent
这对我有用