問題背景
使用在很多項目中,由於需要用到tensorflow,scipy,sklearn等這些庫,所以需要libstdc++庫。
問題原因
這個問題的出現與寫的代碼無關,只與操作系統的libstdc++配置相關,由於Linux內核不支持,gcc版本太低。
解決方案
百度查詢稀里糊塗的就解決了
解決過程
- 查看系統gcc版本
gcc --version
strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI'
# Anaconda
strings ~/anaconda3/lib/libstdc++.so.6 | grep 'CXXABI'
- GCC 4.8.5 不支持 C++11,在升級gcc的時候使用yum是無效的,只能下載源碼、編譯。
- 下載和解壓
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
- 編譯前的准備工作
#安裝C和C++的靜態庫
yum install -y glibc-static libstdc++-static
#安裝舊版本的gcc、c++編譯器
yum install gcc gcc-c++
- 安裝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
- 編譯安裝gcc
#調用gcc源程序的configure(后面的參數選項可根據需要自行修改),用於配置gcc
./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
#編譯gcc源程序
make # 這一步需要花費 兩個小時的時間
#安裝gcc,可以用locate libstdc++.so 檢查,如果更新了新的libstdc++.6,可以不執行這一步
make install
- 使用locate命令定位到libstdc++.so的位置,然后復制,建立軟鏈
# 需要注意路徑與權限問題
locate libstdc++.so
rm -rf libstdc++.so.6
ln -sf libstdc++.so.6.0.24 libstdc++.so.6
Idconfig