前段时间在CentOS6集群上跑TensorFlow的时候遇到了glibc和gcc版本过低的问题。本篇讲升级gcc。
问题
如果你的gcc版本过低,在跑一些比较新的软件的时候,可能会报这样的错误: 1
libstdc++.so.6: version CXXABI_1.3.7’ not found
那么你就需要更新gcc了,因为CXXABI_x是包含在gcc的libstdc++中的。
查看你的gcc版本
1
gcc -v
查看libstdc++版本 1
find / -name "libstdc++.so.*"
安装必要依赖包
1
yum install gcc gcc-c++ automake autoconf libtool make
下载和解压
1
2wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.9.2/gcc-4.9.2.tar.bz2
tar xf gcc-4.9.2.tar.bz2
如果直接从官网下载的话,因为国内网络问题,会慢到怀疑人生。这里提供一个网盘地址。 链接:https://pan.baidu.com/s/1X3cv2eUBh1ViUWOeUQtrCg 密码:ya2y
下载内置依赖
1
2cd gcc-4.9.2
./contrib/download_prerequisites
同样的,下载速度依然龟速。依赖文件包含在上面的网盘地址里了,你可以一并下载下来,再上传到服务器。
打开download_prerequisites
这个脚本,发现里面的工作就是下载了几个依赖包到gcc目录外,然后解压,并构建软连接到当前gcc目录。
既然如此,我们就照猫画虎的执行就好了。 1
2
3
4
5
6
7
8tar xf ../mpfr-2.4.2.tar.bz2
ln -sf mpfr-2.4.2 mpfr
tar xf ../gmp-4.3.2.tar.bz2
ln -sf gmp-4.3.2 gmp
tar xf ../mpc-0.8.1.tar.gz
ln -sf mpc-0.8.1 mpc
编译安装
1
./configure --prefix=/usr --enable-languages=c,c++ --enable--long-long --enable-threads=posix --disable-checking --disable-multilib
-j 4
表示开4个线程去编译,一般编译时间大概是20分钟左右。请确保你的系统剩余空间大于6G。如果期间出了错误,一般是缺少依赖和必要库,把依赖安装完后再次执行即可。 1
2make -j4
make install
安装完后,去检查版本是否为4.9.2。
发现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Libraries have been installed in:
/usr/lib/../lib64
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
安装完后,会打印这样一段话。这段话的大概意思是linux不会自动去你自己指定的安装目录寻找gcc,你需要在环境变量中设置gcc的安装目录,比如: 1
LD_LIBRARY_PATH=/your_gcc_path/
但是,我们不需要这么干,因为我们安装的时候,路径配置到了gcc的缺省路径上了。
Comments