我的环境: Centos 7.6, tensorflow1.14
我的解决方法:升级了gcc,然后移除 /lib64/libstdc++.so.6,然后链接ibstdc++.so.6.0.26 到 /lib64/libstdc++.so.6
升级gcc的方法参考:https://www.liuhaolin.com/linux/535.html
gcc安装编译
yum update -y
yum install -y gcc-c++ glibc-static gcc bzip2 wget tmuxcd ~
wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz
tar -xzf gcc-9.1.0.tar.gz
cd gcc-9.1.0# 这个下载过程比较久
./contrib/download_prerequisites
# gmp-6.1.0.tar.bz2: OK
# mpfr-3.1.4.tar.bz2: OK
# mpc-1.0.3.tar.gz: OK
#isl-0.18.tar.bz2: OK
# All prerequisites downloaded successfully. # 指定路径到 /usr/local/gcc
./configure --prefix=/usr/local/gcc --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multilib# 该过程也很久,服务器如果是两核的就不建议加 -j4 参数
time make -j4make install
gcc安装后的设置
# 环境变量path
echo "export PATH=/usr/local/gcc/bin:$PATH" >> /etc/profile.d/gcc.sh
source /etc/profile.d/gcc.sh# 头文件
ln -sv /usr/local/gcc/include/ /usr/include/gcc# 库文件
echo "/usr/local/gcc/lib64" >> /etc/ld.so.conf.d/gcc.conf
ldconfig -v
ldconfig -p |grep gcc
查看gcc版本
gcc -vUsing built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc/libexec/gcc/x86_64-pc-linux-gnu/9.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ./configure --prefix=/usr/local/gcc --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 9.1.0 (GCC)
更新 /lib64/libstdc++.so.6
参考:https://stackoverflow.com/questions/49797965/updating-libstdc-so-6-to-glibcxx-3-4-21-and-cxxabi-1-3-9-after-updating-to-gcc
# 查看/lib64/libstdc++.so.6对应的版本是6.0.19
ls -ali /lib64/libstdc++.so.6
267435 lrwxrwxrwx 1 root root 19 Dec 28 09:10 /lib64/libstdc++.so.6 -> libstdc++.so.6.0.19
查看更新gcc后的版本
find / -name "libstdc++.so.6*"/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/usr/local/gcc/lib64/libstdc++.so.6
/usr/local/gcc/lib64/libstdc++.so.6.0.26-gdb.py
/usr/local/gcc/lib64/libstdc++.so.6.0.26
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.19
移除更新
rm -f /lib64/libstdc++.so.6# 链接新的libstdc++.so.6.0.26 到 /lib64/libstdc++.so.6
ln -s /usr/local/gcc/lib64/libstdc++.so.6.0.26 /lib64/libstdc++.so.6