在Ubuntu14.04下安装gcc 6.2解决C++14支持问题

在学习《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源码时需要安装GMPMPFR,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安装完毕。

上面是我安装gcc6.2时的命令。

配置环境变量

此时系统中存在两个版本的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
export LD_LIBRARY_PATH=/usr/local/gcc-5.3/lib:/usr/local/gcc-5.3/lib64:$LD_LIBRARY_PATH

注销重新登录,使变量生效

至此,gcc5.3安装完毕,解决了上述C++11的支持问题。

转自:http://blog.csdn.net/njudongchen/article/details/50511867

相关文章

目录前言一、创建Hadoop用户二、更新apt和安装Vim编辑器三、...
原文连接:https://www.cnblogs.com/yasmi/p/5192694.html ...
电脑重启后,打开VirtualBox,发现一直用的虚拟机莫名的消失...
参见:https://blog.csdn.net/weixin_38883338/article/deta...
Ubuntu 18.04 LTS 已切换到 Netplan 来配置网络接口。Netpla...
介绍每个 Web 服务都可以通过特定的 URL 在 Internet 上访问...