一 问题背景
这个错误的出现往往与我前面的一篇文章 ImportError: /lib64/libm.so.6: version `CXXAB_1.3.8.' not found (required by /usr/local/python37/lib/python3.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so) 的错误共同出现,这两个错误不仅看似相似,解决办法相似,而且还有极大的关联性,一不小心,可能就会陷入极难修复的境地。
二 问题原因
都是由于linux的库比较老旧,而现代技术需要使用新的版本造成的,最后归结一下,就是需要升级gcc和glibc这两个内置库,这两个库必须手动升级,作为一个野生运维人员,我一直相信,凡手动,必出漏洞,这不是,为了这个问题,我花了好几天的时间,终于修复。
三 解决重点
- gcc的版本不要太高,gcc-7.2.0.tar.xz 这个版本即可,如需查看相关链接请点击 ImportError: /lib64/libm.so.6: version `CXXAB_1.3.8.' not found (required by /usr/local/python37/lib/python3.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so) 这篇文章
- gcc只安装一半就可以了,意思是,make完就可以了,不需要make install,这是使用 locate libstdc .so 查看gcc-7.2.0目录下的libstdc .so.6库,复制粘贴到lib64下。
- glibc的安装之前一直出错,可能就是因为我安装了gcc9的版本,现在gcc还是4.8.5的版本,glibc-2.23很轻松就可以安装了,具体安装细节如下。
# 1 无bug安装过程
wget http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz
tar xf glibc-2.23.tar.gz
cd glibc-2.23/
mkdir build
cd build/
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
make install
ldd --version
# 2 大部分时候make之后需要这一步
make之后 make install之前打开新窗口去创建一个软链接不然install的时候会报错
cd /lib64
unlink libm.so.6
ln -s libm-2.23.so libm.so.6
# 3 可能出现的错误和解决方案
“”“
make的错误两个文件缺少一对 {}
如何快速找到需要添加的位置, 进入vim后 直接输入 / 符号 后面接你要搜索的内容,类似浏览器的Ctrl F查找
”“”
/ *loc != NULL 快速匹配 *loc != NULL
# 错误1
vim /home/glibc-2.23/nis/nis_call.c
if (*loc != NULL)
{ #这里添加一个{号
for (i = 1; i < 16; i)
if (nis_server_cache[i] == NULL)
{
@@ -690,6 691,7 @@ nis_server_cache_add (const_nis_name nam
|| ((*loc)->uses == nis_server_cache[i]->uses
&& (*loc)->expires > nis_server_cache[i]->expires))
loc = &nis_server_cache[i];
} #这里添加一个} 号
old = *loc;
# 错误2
vim /home/glibc-2.23/stdlib/setenv.c
ep = __environ;
if (ep != NULL)
{ #这里添加一个{号
while (*ep != NULL)
if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
{
@@ -290,6 291,7 @@ unsetenv (const char *name)
}
else
ep;
} #这里添加一个}号
UNLOCK;