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;   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM