项目中的库使用了c++0x中的功能,需要支持c++11的编译器。CentOS6软件仓库中的gcc/g++版本是4.4.7,4.7以上的版本才能完全支持c++11的标准,从而需要下载并从源码编译安装gcc。下面是安装步骤:

  1. 从官网下载到gcc4.8.3版本的源码。gcc最新版本是4.9.0,根据实践4.9.0在编译iomanip头文件的时候有问题,于是转向了4.8.3。另外一个现象是4.8.3的发布日期晚于4.9.0,预计是两条开发分支造成的。找一个下载地址,然后下载下来:wget http://gcc.petsads.us/releases/gcc-4.8.3/gcc-4.8.3.tar.gz
  2. 解压文件:tar -zxvf gcc-4.8.3.tar.gz
  3. 根据README文件显示,安装说明应该在gcc/doc/下,不过没有细看。根据以往经验,编译gcc需要下载编译依赖,主要是mpfr, gmp等。从网上教程来看,gcc4.8.3版本已经写好了脚本下载这些依赖而无需再手动编译这些依赖项了。执行下面脚本下载依赖的文件:./contrib/download_prerequisites
  4. 接下来就可以运行configure脚本来对编译选项进行配置。当然建议在一个单独的目录里进行:mkdir buildcd build

    ../configure –prefix=/opt/gcc-4.8.3 –enable-languages=c,c++,fortran –disable-multilib

  5. configure成功的话会生成Makefile,使用其进行编译和安装make -j8 和make install
  6. 如果configure的时候配置了prefix目录,并且该目录不在标准目录下,则需要更新PATH变量。由于Linux命令的查找方式是找到即停止,所以需要确保gcc所在目录出现在/usr/bin前面。export PATH=/opt/gcc-4.8.3/bin:$PATH

可将这句话加在.bashrc, .bash_profile. /etc/local.rc, /etc/profile等地方使其生效。使用gcc -v -E – 可查看版本和相关库信息。

如果需要替换系统的gcc,有两个地方需要更改:

  1. /usr/bin/gcc需要变更。可将旧版本的gcc移走,拷贝新的gcc可执行到/usr/bin目录下;
  2. /usr/lib64/cstdc++.so.6 和/usr/lib/cstdc++.so.6的指向需要变更。

创建软连接将新版本的动态链接库替换即可。