一 問題背景
這個錯誤的出現往往與我前面的一篇文章 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;