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)


問題背景

使用在很多項目中,由於需要用到tensorflow,scipy,sklearn等這些庫,所以需要libstdc++庫。

問題原因

這個問題的出現與寫的代碼無關,只與操作系統的libstdc++配置相關,由於Linux內核不支持,gcc版本太低。

解決方案

百度查詢稀里糊塗的就解決了

解決過程

  1. 查看系統gcc版本
gcc --version
strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI'
# Anaconda
strings ~/anaconda3/lib/libstdc++.so.6 | grep 'CXXABI'
  1. GCC 4.8.5 不支持 C++11,在升級gcc的時候使用yum是無效的,只能下載源碼、編譯。
  2. 下載和解壓
cd /home
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.2.0/gcc-7.2.0.tar.xz
tar -xvf gcc-7.2.0.tar.xz
cd gcc-7.2.0
  1. 編譯前的准備工作
#安裝C和C++的靜態庫
yum install -y glibc-static libstdc++-static
#安裝舊版本的gcc、c++編譯器
yum install gcc gcc-c++
  1. 安裝gcc需要下載諸如gmp、mpfr、mpc等依賴文件,執行download_prerequisites將會自動完成這項工作,但是由於一些原因可能需要需要我們手動操作,步驟是:1 下載,2 解壓, 3 建立軟簾
MPFR=mpfr-3.1.4
GMP=gmp-6.1.0
MPC=mpc-1.0.3
 
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPFR.tar.bz2 
tar xjf $MPFR.tar.bz2 
ln -sf $MPFR mpfr 
 
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$GMP.tar.bz2 
tar xjf $GMP.tar.bz2  
ln -sf $GMP gmp 
 
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPC.tar.gz
tar xzf $MPC.tar.gz 
ln -sf $MPC mpc 
 
rm -f $MPFR.tar.bz2 $GMP.tar.bz2 $MPC.tar.gz 
  1. 編譯安裝gcc
#調用gcc源程序的configure(后面的參數選項可根據需要自行修改),用於配置gcc
./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
#編譯gcc源程序
make  # 這一步需要花費 兩個小時的時間

#安裝gcc,可以用locate libstdc++.so 檢查,如果更新了新的libstdc++.6,可以不執行這一步
make install
  1. 使用locate命令定位到libstdc++.so的位置,然后復制,建立軟鏈
# 需要注意路徑與權限問題
locate libstdc++.so  
rm -rf libstdc++.so.6
ln -sf libstdc++.so.6.0.24 libstdc++.so.6
Idconfig


免責聲明!

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



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