我在我的CentOS机器上尝试了一个python应用程序,它给出了以下错误:
ImportError: /usr/lib64/libc.so.6: version `GLIBC_2.18' not found (required by /tmp/_MEI2BYIr4/libstdc++.so.6)我一直想升级GLIBC,但是在阅读了一些论坛之后,我似乎可以打破这个系统。你知道还有别的办法吗?
谢谢
发布于 2018-01-29 22:17:23
首先,检查python应用程序,因为它可能过时了,并且可能误读了glibc版本。CentOS显示了已安装的基本版本,并对其进行了修补以跟上更改,这可能只是修复代码中正在寻找的快速修复版本的情况,但如果应用程序正在积极开发,则需要让开发人员知道或尽可能为您自己分叉。
最新的glibc on CentOS 7应该是2.17-196.el7_4.2
如果绝对有必要运行这个应用程序,官方的RHEL方法将是容器化,但是您仍然需要提供一个正常工作的glibc,这在CentOS 7中是不可能的。
中安装glibc
如果这不可行,并且作为绝对的最后手段,可以安装比2.18更新的glibc版本,因为这是9年前的版本了,glibc已经更新了几个漏洞,我不确定它是否会与CentOS 7中的make版本一起构建,但是任何较新的版本都应该工作如下:
您可以在服务器的其他地方构建所需的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是安装第三方应用程序和库的标准位置,但是您可以使用远离系统路径的任何路径。
发布于 2018-02-01 09:44:45
最后,我没有升级GLIBC。我通过R下载的gdc-client工具似乎是为Ubuntu而不是CentOS下载的,尽管我是在CentOS 7上下载的,然后我下载了用于CentOS的gdc客户机,它运行良好。
发布于 2019-08-22 11:48:47
在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这对我来说很管用
https://serverfault.com/questions/894625
复制相似问题