linux gcc/g++编译安装 gcc7.5.0 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! 可能是因为我安装的时候有依赖没法自动修改这个连接导致的,不知道一个空的机器有没有这个问题。

经验分享 程序员 微信小程序 职场和发展