CentOS 7 升级gcc/g++编译器
gcc的升级必须要使用源码进行升级,也就说,必须要使用源码进行编译才行。我的7.2的CentOS目前自带的gcc是4.8.5的,gcc从4.8之后开始支持C++11,但是鉴于现在C++14、C++17都已经出来了,所以还是把编译器升级一下,才能紧跟发展,尝试使用14/17的新特性。gcc源码下载地址:https://gcc.gnu.org/。
第一步:下载源代码
查了资料步骤上多了几个,重做一下:
首先:
yum -y install texinfo
如果不执行这个命令的话,那么在执行第四步的配置的时候,会出现makeinfo:could not find this command。
从:ftp://ftp.gnu.org/gnu/gcc/gcc-8.2.0/下载源码包:gcc-8.2.0.tar.gz。使用命令:tar -zxvf gcc-8.2.0.tar.gz解压。当然也可以在:https://github.com/gcc-mirror/gcc下载源码。下载过程如下:
选择gcc版本,在Branches这里选择gcc-8这个分支:

接下来点击旁边的Tags,可以选择gcc-8.2.0-Release

第二步:安装依赖库
据说原来升级gcc的时候超级麻烦因为它依赖了mpfr、gmp、mpc 和isl共四个库,它们下载起来也很麻烦,现在事情变得简单了很多, 在gcc目录下执行一次执行以下命令:
./contrib/download_prerequisites #作用是自动下载gcc的4个依赖包
可能会出现如下错误:
[root@CentOs64- gcc-8.2.]# ./contrib/download_prerequisites
-- :: URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
-- :: URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
-- :: URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
-- :: URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1..tar.bz2: OK
mpfr-3.1..tar.bz2: OK
mpc-1.0..tar.gz: OK
isl-0.18.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
tar: Error is not recoverable: exiting now
error: Cannot extract package from gmp-6.1..tar.bz2
这个问题其实就是因为tar解包的时候没有解成功。这是因为机器上没有安装bzip2,使用如下命令安装bzip2:
yum -y install bzip2
安装这个之后,把解压后的目录删了,再重新走一遍上面的过程,这次就OK了,4个依赖包下载成功。
[root@CentOs64- gcc-8.2.]# ./contrib/download_prerequisites
-- :: URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
-- :: URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
-- :: URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
-- :: URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1..tar.bz2: OK
mpfr-3.1..tar.bz2: OK
mpc-1.0..tar.gz: OK
isl-0.18.tar.bz2: OK
All prerequisites downloaded successfully.
如果想要自己安装这些依赖包的话,可以参考这篇博客:(https://blog.csdn.net/yndu_13/article/details/82842408),但是我没有照着这个操作,就是没有验证到底是否行得通……
第三步:配置
然后使用命令:
mkdir build
cd build
进入build目录后,再执行下面的配置命令。
如果你只需要支持C/C++编译器,那么在gcc目录下执行如下配置命令:
../configure --prefix=/usr --enable-multilib --enable-languages=c,c++ -disable-multilib
否则,执行:
../configure --prefix=/usr --enable-multilib
这条命令的作用实际上就是生成合适的Makefile,执行的过程中出现了一个警告:
configure: WARNING: using in-tree isl, disabling version check
*** This configuration is not supported in the following subdirectories:
gnattools gotools target-libada target-libhsail-rt target-libgfortran target-libbacktrace target-libgo target-libffi target-libobjc target-liboffloadmic
(Any other directories should still work fine.)
说明一下,这个警告,我看了很多人的博客,都没有提到过,有的博客倒是把它列出来了,但是却没有给出解决的办法。
配置成功以后,执行命令:
yum groupinstall "Development Tools"
第四步:make
第三步执行无误后,在gcc目录下使用make目录。建议使用单任务make,不要使用多任务,多任务有可能会编译报错。
然而安装失败了……
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES.
make[]: *** [configure-stage1-zlib] 错误
make[]: 离开目录“/root/gcc-8.2.”
make[]: *** [stage1-bubble] 错误
make[]: 离开目录“/root/gcc-8.2.”
make: *** [all] 错误
先把原来安装的东西都清理一下:
make distclean
这个问题,就是我把执行了一下 yum -y install texinfo,然后把整个过程重新走了一遍,就没有问题了。
第四步
安装,执行命令
make install
等待安装结束后就能正常使用gcc了。现在使用gcc -v 检查版本的话,就是gcc 8.2.0。在make的过程中也有一些警告,目前尚不知这些警告会造成何种影响,这些警告有点儿多,没有逐一记录下来,如果有后来者看到这篇博客,并遇到了和我一样的困扰,并且解决了这个问题,烦请告之,感激不尽。
升级gcc/g++的必要性,现在下载到的CentOS镜像中自带的gcc版本是4.8.5,gcc从4.8开始支持C++11,但是在以后的编码工作中势必会用到C++14、C++17乃至更新的标准下的新特性,既然标准库已经造出了轮子,为什么我们不用呢?而要使用这些新特性,你就必须要获得编译器的支持。
补充:
升级gcc的一个更加简单的做法,但是这个做法的缺点是只支持64位程序而无32位支持。
采用CentOS的一个第三方库SCL(软件选集),SCL可以在不覆盖原系统软件包的情况下安装新的软件包与老软件包共存并且可以使用scl命令切换,不过也有个缺点就是只支持64位的。还有devtoolset-4(gcc 5.2)及之前的版本都已经结束支持,只能通过其他方法安装。
本次升级到gcc8,命令如下:
yum -y install centos-release-scl
yum -y install devtoolset--gcc devtoolset--gcc-c++ devtoolset--binutils
scl enable devtoolset- bash #启动gcc8
你要哪个版本的就把第2条命令中的数字8改成你要的主版本号就可以了。这样升级到的是最新的版本。例如8升级到的是8.2.0而不是8.1。
通过scl命令启动gcc,这个只是暂时的,当你的shell关闭后或者重启就会恢复原来的版本,要想一直使用升级后的版本可以使用如下命令:
echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile
CentOS 7 升级gcc/g++编译器的更多相关文章
- CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update.... yum install 或者 添加y ...
- 【转】CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
原文地址:https://www.cnblogs.com/lzpong/p/5755678.html 我这里是centos7 升级到gcc8.1,过程差不多,参考这篇文章,记录一下. ---原文--- ...
- gcc/g++编译器的安装与说明
gcc/g++编译器的安装与说明 1.gcc/g++编译器的安装 gcc yum install gcc g++ yum install gcc-c++ 2.gcc/g++的作用 将c/c++源代码编 ...
- centos 6升级 GCC 到4.8
centos 6升级 GCC 到4.8 安装最新版本的swoole 提示 pecl install swolle ... GCC 4.8 or later required. 首先想到的时候yum ...
- 通过yum升级gcc/g++至版本4.8.2
最近在坐一个日期处理的问题,需要安装sxtwl模块,但是gcc版本4.7死活也安装不上,最后测试到只能升级gcc版本到4.8才得以解决 [root@123 bin]# gcc -vUsing buil ...
- centos 7升级gcc到10.2.0
安装gcc 由于 Linux 操作系统的自由.开源,在其基础上衍生出了很多不同的 Linux 操作系统,如 CentOS.Ubuntu.Debian 等.这些 Linux 发行版中,大多数都默认装有 ...
- UBUNTU 下如何升级 gcc, g++
正如大家所知道的GCC并不支持"make uninstall". 一种推荐安装方式就是把GCC 安装在你自己指定的一个路径,当你不须要某个GCC版本号的时候你仅仅须要移除相应版本号 ...
- Linux环境下GNU, GCC, G++编译器
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012823258/article/details/36890125 一.GNU GNU是" ...
- Linux环境下GNU, GCC, G++编译器(转)
一,GNU GNU是“GNU 's Not Unix”的递归缩写, Stallman宣布GNU应当发音为Guh-NOO(革奴)以避免与new这个单词混淆(注:Gnu在英文中原意为非洲牛羚,发音与new ...
随机推荐
- [Xcode 实际操作]七、文件与数据-(23)UI Testing系统界面测试功能的使用
目录:[Swift]Xcode实际操作 本文将演示UI Testing系统界面测试功能的使用. 如果项目中尚未引入界面测试功能,请点击项目属性面板->[General]面板左下角的[+]图标 - ...
- performSegueWithIdentifier:sender里边的sender是啥意思
performSegueWithIdentifier:sender里边的sender是啥意思啊?怎样用啊? [self performSegueWithIdentifier:@"pushSi ...
- 机智云连接ESP8266--远程控制点亮RGB灯
概述 智能灯,是一个简单常见的智能产品,硬件电路简单,程序本身也不复杂:下面我们使用esp8266开发板和机智云云端,实现如何将一个传统的灯泡,改造成可以远程控制开关的智能灯. 1.准备工作 硬件: ...
- gcd(2018.10.24)
良心题,暴力枚举即可. 代码: #include<cstdio> #include<cmath> #include<algorithm> using namespa ...
- 百度网盘不限速!VIP视频免费看!这两款插件被无数人安利!
今天给给位推荐两款,我一直在使用的浏览器插件,简直爆炸!全网VIP视频随意看,所有网页上的视频,你想要的全部都能下载! 这两款插件堪称日常必备插件,只要你使用浏览器,就一定需要下面这些插件功能:快速下 ...
- Java语言和虚拟机规范下载
- VLAN-4-在路由器上配置Trunk
VLAN Trunk技术可以用在路由器和主机上,也可以用在交换机上.路由器不支持DTP,所以工程师必须手动配置. 路由器Trunk需要使用子接口(在一个接口中实现多个vlan间的路由和通信),每个子接 ...
- JetSpeed2因dom4j包冲突导致PSML页面文件数据丢失
使用JetSpeed2进行二次开发时突然出现在保存Portlet配置信息时出现PSML页面文件数据丢失的情况,几经测试,最终发现是因为Portlet中的dom4j.jar与jetspeed应用中的do ...
- SourceGrid之Grid绑定数据
private void BindData() { //为绑定的按钮选线增加单击事件 SourceGrid.Cells.Controllers.CustomEvents clickEvent = ne ...
- I/O————字节流
InputStream字节输入流 OutputStream字节输出流 用于以字节的形式读取和写入数据 下面是使用 字节输入流读取文件字节输出流写入文件 文件可能不存在,所以使用try catch pu ...