CentOS升级GCC-4.8

在配置osm2pgsql时,由于忽略了作者一句话,导致两天的痛苦debug。

Make sure you have installed the development packages for the libraries mentioned in the requirements section and a C++ compiler which supports C++11. Both GCC 4.8 and Clang 3.4 meet this requirement.

服务器上CentOS,gcc为4.7版本,特地Google说GCC 4.7支持C++11特性,犹豫了一下还是没更新。真是作大死,一定要听作者的话!!!

Install

下载资源包

1
2
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.0/gcc-4.8.0.tar.bz2
tar -jxvf gcc-4.8.0.tar.bz2

下载编译所需依赖库

1
2
3
cd gcc-4.8.0 
./contrib/download_prerequisites 
cd ..

建立编译输出目录

mkdir gcc-build-4.8.0

生成makefile文件

1
2
cd gcc-build-4.8.0
../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

编译

make -j4

编译之间较长,大概半小时左右。

安装

sudo make install

确认

gcc -v

GLIBCXX_3.4.19 not found错误

在后续osm2pgsql安装过程中,遇到了/usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.19' not found错误
解决方案:
到编译时的目录下面找到文件:libstdc++.so.6.0.18
即上述建立的path/gcc-build-4.8.0/

1
2
cd /osg2pgsql/build_gcc_4.8.1/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs
strings libstdc++.so.6.0.18|grep GLIBCXX

一般来讲,里面就有系统缺失的GLIBCXX版本。
然后,把该文件拷贝到了/usr/lib64下,将libstdc++.so.6指向libstdc++.so.6.0.18:

1
2
3
[root@GeoVisWeb lib64]$ rm -r libstdc++.so.6
rm: remove symbolic link `libstdc++.so.6'? y
[root@GeoVisWeb lib64]$ ln -s libstdc++.so.6.0.18 libstdc++.so.6

Done