C++11标准在2011年8月份获得一致通过,这是自1998年后C++语言第一次大修订,对C++语言进行了改进和扩充。随后各编译器厂商都各自实现或部分实现了C++中的特性
。
本文主要介绍在Linux系统下,如何升级GCC以支持C++11。目前来看GCC是对C++11支持程度最高最多的编译器,但需要GCC4.8及以上版本。
本文使用操作系统:Centos 6.4 Desktop,64bit;
原GCC版本:4.4.7;
目标:升级GCC到4.8.2,以支持C++11。
获取GCC 4.8.2包:wget http://gcc.skazkaforyou.com/releases/gcc-4.8.2/gcc-4.8.2.tar.gz;
解压缩:tar -xf gcc-4.8.2.tar.gz;
进入到目录gcc-4.8.2,运行:./contrib/download_prerequisites。这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。
建立输出目录并到目录里:mkdir gcc-build-4.8.2;cd gcc-build-4.8.2;
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib。--enable-languages表示你要让你的gcc支持那些语言,--disable-multilib不生成编译为其他平台可执行代码的交叉编译器。--disable-checking生成的编译器在编译过程中不做额外检查,也可以使用--enable-checking=xxx来增加一些检查;
编译:make;注意此步和上一步,比较耗时;
安装:make install;
验证:gcc -v;或者g++ -v,如果显示的gcc版本仍是以前的版本,就需要重启系统;或者可以查看gcc的安装位置:which gcc;然后在查看版本 /usr/local/bin/gcc -v,通常gcc都安装在该处位置,如果显示为;
则表示已经升级成功。
安装过程中遇到一些问题:
1、Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0
先在官网上下载最新版的对应三个文件:
ftp://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.bz2
ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
ftp://ftp.gnu.org/gnu/mpfr/mpfr-3.1.3.tar.gz
先开始安装GMP。解压GMP的压缩包后,得到源代码目录gmp-6.1.0。在该目录的同级目录下建立一个临时的编译目录,这里命名为temp。然后开始配置安装选项,进入temp目录,输入以下命令进行配置:
../gmp-gmp-6.1.0/configure --prefix=/usr/local/gmp-6.1.0
make
sudo make install
mpfr和mpc的安装方法与gmp类似。不过要注意配置的时候要把gmp与mpfr的依赖关系选项加进去,具体配置命令如下:
../mpfr-3.1.3/configure --prefix=/usr/local/mpfr-3.1.3 --with-gmp=/usr/local/gmp-gmp-6.1.0
../mpc-1.0.3/configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp-gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.3
安装好这三个库之后,就可以正式开始安装gcc了。
当然了链接的时候,需要刚刚编译的3个lib。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-1.0.3/lib:/usr/local/gmp-6.1.0/lib:/usr/local/mpfr-1.0.3/lib
然后是典型的configure,make,install三步曲。
../trunk/configure --prefix=/usr/local/gcc-4.7 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.0 --with-mpc=/usr/local/mpc-0.9
make
make check(可选)
sudo make install
经过漫长的等待: