在学习《C++ Primer》时,我用的环境是Ubuntu14.04,采用DPKG机制最新能使用的gcc版本是4.8.4,虽然这个版本已经对C++11支持的已经很好了,但是还是有一些小问题。
例如,对于string类型,可以使用insert(p,b,e) 将迭代器b,e指定范围内的元素插入到迭代器p指向的元素之前。在c++11标准下,insert返回的是第一个新加入元素的迭代器,旧版本中返回void;在使用g++ 4.8进行编译的时候会报错,提醒insert返回的是void类型,无法用上述函数返回一个迭代器。
解决上述问题可以通过安装更高版本的gcc来解决问题,我安装的是gcc5.3.0来解决。
下载解压缩
从gcc镜像站点上下载GCC5.3,可供下载的文件有两种形式:gcc-5.3.0.tar.gz和gcc-5.3.0.tar.bz2。两种文件的内容都是一样的。
通过tar -xzvf gcc-5.3.0.tar.gz 或者tar -xjvf gcc-5.3.0.tar.gz 解压相应的文件,解压后得到目录gcc-5.3.0,在gcc-5.3.0/INSTALL里面有详细的安装说明。
安装依赖
编译gcc源码时需要安装GMP,MPFR,MPC三个依赖,下载最新版本。我下的三个版本分别是gmp-6.1.0,mpc-1.0.3,mpfr-3.1.3。
最先安装GMP,解压GMP的压缩包后,得到源代码目录gmp-6.1.0。在该目录的同级目录下建立一个临时的编译目录,这里命名为temp。为了防止在安装目录下编译产生的目录产生混乱,然后开始配置安装选项,进入temp目录,输入以下命令进行配置:
../gmp-6.1.0/configure –prefix=/usr/local/gmp-6.1.0
make &make install
./configure -prefix=/usr/local/gmp-6.1.1
之后清空temp,安装MPFR,配置的时候需要添加依赖关系
rm -r *
../mpfr-3.1.3/configure –prefix=/usr/local/mpfr-3.1.3 –with-gmp=/usr/local/gmp-6.1.0
./configure -prefix=/usr/local/mpfr-3.1.5 -with-gmp=/usr/local/gmp-6.1.1
最后安装MPC,清空temp添加GMP,MPFR依赖。
rm -r *
../mpc-1.0.3/configure –prefix=/usr/local/mpc-1.0.3 –with-gmp=/usr/local/gmp-6.1.0 –with-mpfr=/usr/local/mpfr-3.1.3
./configure -prefix=/usr/local/mpc-1.0.3 -with-gmp=/usr/local/gmp-6.1.1 -with-mpfr=/usr/local/mpfr-3.1.5
安装好这三个依赖之后才可以安装gcc,否则编译的时候会报错
编译安装GCC
再次清空temp首先配置GCC,在temp文件夹中执行以下命令,注意,此时temp和gcc-5.3.0在同级目录下
../gcc-5.3.0/configure –prefix=/usr/local/gcc-5.3 –enable-threads=posix –disable-checking –disable-multilib –enable-languages=c,c++,java,objc –with-gmp=/usr/local/gmp-6.1.0 –with-mpfr=/usr/local/mpfr-3.1.3 –with-mpc=/usr/local/mpc-1.0.3
./configure -prefix=/usr/local/gcc-6.2 -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,java -with-gmp=/usr/local/gmp-6.1.1 -with-mpfr=/usr/local/mpfr-3.1.5 -with-mpc=/usr/local/mpc-1.0.3
在配置时,对于语言language=选项,可以根据自己需要的编译器选择语言。
make
sudo make install
至此GCC5.3安装完毕。
配置环境变量
此时系统中存在两个版本的gcc,一个是/usr/bin/gcc,另一个是/usr/local/gcc-5.3/ 如不修改环境变量,在每次调用5.3版本的gcc时都需要指定路径。为了方便使用,可以在/usr/bin目录下做一个符号链接
cd /usr/bin
ln -s /usr/local/gcc-5.3/bin/gcc gcc53
ln -s /usr/local/gcc-5.3/bin/g++ g++53
这样就可以使用gcc53 g++53来调用程序了,旧版本的gcc,g++仍然可以适用。
对于库路径同样需要设置下,这样,保证在调用库函数的时候可以适用到新版编译器的库函数,在etc/profile文件中适用root权限添加如下代码
- 1
- 1
注销重新登录,使变量生效
至此,gcc5.3安装完毕,解决了上述C++11的支持问题。
转自:http://blog.csdn.net/njudongchen/article/details/50511867