linux C++17编译:
- 编译指定参数 -std=c++17
编译指定参数 -std=c++17
例:g++ -std=c++17 main.cpp
#如果编译器不支持c++17就会提示:g++: error: unrecognized command line option ‘-std=c++17’
方法:
1.下载高版本gcc 建议7.3以上
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
./contrib/download_prerequisites
输出结果
[root@localhost gcc-7.5.0]# ./contrib/download_prerequisites
2019-11-19 17:19:29 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> “./gmp-6.1.0.tar.bz2” [1]
2019-11-19 17:19:52 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> “./mpfr-3.1.4.tar.bz2” [1]
2019-11-19 17:20:11 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> “./mpc-1.0.3.tar.gz” [1]
2019-11-19 17:21:26 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2 [1626446] -> “./isl-0.16.1.tar.bz2” [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.16.1.tar.bz2: OK
tar (child): lbzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
error: Cannot extract package from gmp-6.1.0.tar.bz2
这种清空需要下载一个 lbzip2
yum install lbzip2 再执行就ok了。
4.编译:
先创建一个文件夹 把这四个依赖的都cp进去。
mkdir gcc-Builder-7.5.0
cp gmp-6.1.0.tar.bz2 mpfr-3.1.4.tar.bz2 mpc-1.0.3.tar.gz isl-0.16.1.tar.bz2 gcc-Builder-7.5.0
然后进入该文件夹
cd gcc-Builder-7.5.0
先进行编译配置,生成makefile文件
执行
…/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
看是否成功,成功之后会在当前目录生成Makefile文件
开始编译:
make -j4
编译时间有点长大概二十到半个小时
5.安装:
安装前要卸载原来gcc ,g++
查看安装的包
rpm -q gcc
rpm -q gcc-c++
再根据包名卸载之
如
rpm -e 包名
此处可能有些依赖不能卸载,于是使用强制卸载才行
rpm -e 包名 --nodeps
注意:可能以来的程序使用不正常
安装:
进入当前目录下的gcc进行安装
cd gcc
make -j8
完成了检查一下是否成功:
gcc -v
g++ -v
如果不成功请检查下环境变量对不对,
我的是安装在/usr/local/bin/ 下面
因我卸载gcc的时候 有些依赖,卸载失败我就直接安装了,结果g++ 正常7.5.0,而gcc还是就的4.8.5
于是我才强制卸载,之后再make -j8.后来遇到 libstd++ 里面缺少好多东西的
解决办法
把这条软连接
/usr/lib/libstdc++.so.6 -> /usr/local/lib/libstdc++.so.6.0.19
改为:
/usr/lib/libstdc++.so.6 -> /usr/local/lib64/libstdc++.so.6.0.24
ok!
可能是因为我安装的时候有依赖没法自动修改这个连接导致的,不知道一个空的机器有没有这个问题。