Fork me on GitHub

ImportError: /lib64/libm.so.6: version `GLIBC_2.23' not found (required by /usr/local/python37/lib/python3.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)

一 问题背景

这个错误的出现往往与我前面的一篇文章 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这两个内置库,这两个库必须手动升级,作为一个野生运维人员,我一直相信,凡手动,必出漏洞,这不是,为了这个问题,我花了好几天的时间,终于修复。


三 解决重点

  1. 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) 这篇文章
  2. gcc只安装一半就可以了,意思是,make完就可以了,不需要make install,这是使用 locate libstdc++.so 查看gcc-7.2.0目录下的libstdc++.so.6库,复制粘贴到lib64下。
  3. 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;   
posted @ 2020-07-28 13:11  马一特  阅读(7496)  评论(0编辑  收藏  举报