Linux 升级g++7.5.0
最近使用需要使用c++14标准,发现自己的编译器版本为gcc 4.8,只支持c++11标准,因此进行升级,升级为可以支持c++17的gcc7.5.0。
关于编译器的版本支持问题可以到gcc的官方文档进行查询。
下面开始介绍安装过程,以及中途遇到的一些问题。
# 1 下载gcc-7.5.0
wget http://mirror.linux-ia64.org/gnu/gcc/releases/gcc-7.5.0/gcc-7.5.0.tar.gz
# 2 解压缩
tar zxvf gcc-7.5.0.tar.gz
# 3 进入解压后的目录
cd gcc-7.5.0
# 4 执行脚本 下载依赖包,大部分国内用户都会失败,由于网络等问题,所需的资源包下载不了,下面的命令本质上来说做的操作就是下载所需的四个资源环境包,分别为:gmp-6.1.0.tar.bz2、mpc-1.0.3.tar.gz、mpfr-3.1.4.tar.bz2、isl-0.16.1.tar.bz2。这里我采用手动下载的方式,提前下载好所需资源包,之后上传到该目录下即可
./contrib/download_prerequisites
cd ..
#建立编译输出目录
mkdir gcc-build-7.5.0
#进入下面目录,执行命令,生成Makefile文件
cd gcc-build-7.5.0
#configure的最后一个参数是关闭32位库,只编译64位库,我的电脑是64位的。如果想要同时编译32位和64位,可以使用-enable-multilib
../gcc-7.5.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
#执行命令进行编译,此处利用4个job,需编译时约40分钟,此值不宜设置过高
make -j4
#安装
make install
#成功执行完成之后,可以查看gcc和g++的版本
gcc -v
g++ -v
不同版本g++切换可以参考:gcc、g++多版本间的切换
遇到的问题:
安装过后,g++ -v 显示正常,命令行直接编译,也没有问题。
g++ -std=c++14 main.cc
但是使用cmake ,然后再make编译的时候会显示
c1plus: error: unrecognized command line option "-std=c++14
显然,make调用的还是老版本的gcc,至于为啥,我也不知道。
解决方法:
- 在cmake时 手动指定g++的路径。g++默认安装在
/usr/local/bin/g++
cmake .. -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++
- 修改 .bashrc 在上面添加下面的代码,
CC=/home/BestPathEver/usr/local/bin/gcc
export CC
CXX=/home/BestPathEver/usr/local/bin/g++
export CXX
然后
$ source ~/.bashr
方案二我没有尝试。不保证可用。
参考文献:
Ubuntu下升级安装gcc-7.5.0教程
stack overflow