linux升级gcc版本详细教程

0.前言

一般linux操作系统默认的gcc版本都比较低,例如centos7系统默认的gcc版本为4.8.5。gcc是从4.7版本开始支持C++11的,4.8版本对C++11新特性的编译支持还不够完善,因此如果需要更好的体验C++11以及以上版本的新特性,需要升级gcc到一个较高的版本。

本文给出了linux系统中涉及国家gcc的操作步骤,供大家参考。

升级步骤可以大致分为下面四个步骤:

  • 查看确认原来的gcc版本

  • 下载需要升级的gcc版本

  • 下载新版本gcc需要的依赖

  • 编译并安装gcc新版本

  1. 查看确认gcc原来的版本

linux命令行中输入:

gcc --version

可以看到显示如下:

gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright © 2015 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。

一般很多linux系统默认的gcc版本为4.8.5,该版本对C++11的支持还不够完善,可以将版本升级到一个更高的版本。本文以升级到版本10.1.0为例。

  1. 下载需要升级的gcc版本并解压

2.1下载gcc新版本

由于linux系统没有外网,本文给出的示例是先在windows系统上将gcc版本下载,然后上传的linux系统中。

下载gcc新版本地址为:

http://ftp.gnu.org/gnu/gcc/

上面有很多gcc版本,需要自己需要的版本进行下载即可。

本文以版本10.1.0为例,点击红色部分,下载文件gcc-10.1.0.tar.gz:

2.2 将gcc新版本上传到linux系统并解压

将下载好的gcc版本上传到linux系统中。本文将版本放在目录:

/opt2/test_other/debug_test/

进入到/opt2/test_other/debug_test/目录,将文件解压到/usr/local目录下面:

tar -zvxf gcc-10.1.0.tar.gz --directory=/usr/local/

解压之后可以在/usr/local目录下面看到解压后的gcc目录:

  1. 下载并gcc需要的依赖

3.1 查看gcc需要的依赖

cd 到gcc-10.1.0目录下面,查看需要的依赖:

vim contrib/download_prerequisites

可以看到需要的依赖以及版本如下:

从上面看到一共有四个依赖:gmp、mpfr、mpc以及isl。

3.2 下载需要依赖

在安装gcc新版本之前一定要先下载这几个依赖(注意依赖的版本)。

依赖下载的地址:

https://gcc.gnu.org/pub/gcc/infrastructure/

下载好4个依赖之后,将文件上传到linux系统的目录/opt2/test_other/debug_test/下面。

3.3 将依赖解压到目录gcc-10.1.0

cd到/opt2/test_other/debug_test/目录下面,用下面命令将gmp文件解压到目录gcc-10.1.0:

tar -jvxf gmp-6.1.0.tar.bz2 --directory=/usr/local/gcc-10.1.0/

用同样的命令可以将isl-0.18.tar.bz2、mpfr-3.1.4.tar.bz2解压到目录gcc-10.1.0。

下面的命令将mpc-1.0.3.tar.gz解压到目录gcc-10.1.0:

tar -zvxf mpc-1.0.3.tar.gz --directory=/usr/local/gcc-10.1.0/

3.4 为新下载的依赖建立软链接

cd到gcc-10.1.0目录下面,依次执行下面四个命令,为四个依赖创建软链接:

ln -sf gmp-6.1.0 gmp
ln -sf isl-0.18 isl
ln -sf mpc-1.0.3 mpc
ln -sf mpfr-3.1.4 mpfr

在目录gcc-10.1.0下面查看建立的软连接:

ls -l | grep ^l

如果上面的软连接建立成功,会看到下面四个链接文件,显示如下:

  1. 编译并安装gcc

4.1 编译并安装

在目录gcc-10.1.0下面依次执行下面两个命令:

mkdir build && cd build 
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib 

如果上面的命令执行正确,可以看到生成的makefile文件。上述命令执行完成之后,build下面可以看到下面几个文件:

config.log config.status Makefile serdep.tmp

注意在执行上面的第二个configure命令时,也可以通过prefix参数为新版本gcc指定安装安装目录(如果没有指定默认为/usr/local/,这里本文没有指定):

../configure --prefix=/usr/local/gcc-10.1.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib

然后在build目录下面执行的命令,编译安装gcc:

make -j4 && make install

该过程时间比较漫长,大约需要2小时以上,需要耐心等待。如果编译安装过程没有报错,最后一段打印大概是这样:

4.2 更新gcc

上面的过程执行完,如果你在linux命令行中输入:gcc -version,你会发现显示的还是原来的版本,这是因为gcc还没有更新,执行的还是原来的gcc命令。

原来的gcc命令位于目录/usr/bin/gcc等目录下面,为了不覆盖原来的命令。将原来的相关内容进行备份处理,执行如下命令:

mv /usr/bin/gcc /usr/bin/gcc485
mv /usr/bin/g++ /usr/bin/g++485
mv /usr/bin/c++ /usr/bin/c++485
mv /usr/bin/cc /usr/bin/cc485
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak

安装的gcc新版本位于/usr/local/bin目录下面,需要为新版本gcc创建软链接:

ln -s /usr/local/bin/gcc /usr/bin/gcc
ln -s /usr/local/bin/g++ /usr/bin/g++
ln -s /usr/local/bin/c++ /usr/bin/c++
ln -s /usr/local/bin/gcc /usr/bin/cc
ln -s /usr/local/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6

上面的步骤步骤完成之后,输入gcc -v查看版本:

可以看到版本已经变成安装的最新版本10.1.0了,说明安装成功。

【参考文章】

  1. https://www.jb51.net/article/95974.htm

  1. https://www.jb51.net/article/230581.htm

  1. https://cloud.tencent.com/developer/article/1424725

  1. https://blog.csdn.net/liyelool/article/details/118656509

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS添加天地图底图服务

目录 一、注册天地图官网、申请Key 二、ArcGis配置和使用 1、配置 2、使用 三、其他方法 一、注册天地图官网、申请Key 进入官网,并注册账号。 地址:国家地理信息公共服务平台 天地图 (tianditu.gov.cn) 点击地图API,申请Key。 注意&am…

理解树的结构-算法通关村

理解树的结构-算法通关村 1.树的结构 树是一个有n个有限节点组成一个具有层次关系的集合,每个节点有0个或者多个子节点,没有父节点的节点称为根节点,也就是说除了根节点以外每个节点都有父节点,并且有且只有一个。树的种类比较多…

力扣题单(小白友好)

力扣题单 算法小白自用题单,目前对于一些简单的数据结构感觉掌握的还可以,但是力扣很多题还是需要看题解,不够熟练;故整理了一份题单,用于巩固练习; 网上确实有很多对于算法分类讲解的网站,but:有一丢丢选择困难症,每天不知道该刷什么题,再加上网站对于一类题一般就有十几道题目…

VS2019 C++ NetCDF配置

原链接1 原链接2 做个备份 1.下载对应的NetCDF-C和C库 官网下载 选择64位的NetCDF4安装版(没有DAP的) 现在官网已经没有NetCDF-C 4.7.3 版本了,网上别人提供了新的下载地址:NetCDF各个版本(Index of /library/net…

Python爬取豆瓣电影Top 250,豆瓣电影评分可视化,豆瓣电影评分预测系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

九.pandas绘图基础

目录 九.pandas绘图基础 1-柱状图 --参数stackedTrue堆积 --参数figsize(宽,高) --自定义横坐标 --设置字体&显示负号 2.箱型图 3. 折线图 九.pandas绘图基础 Pandas的DataFrame和Series,在matplotlib基础上封装了一个简易的绘图函数, 使得我们在数据处…

铸造加工企业引入ERP软件的原因

在当今信息化社会,铸造加工企业面临着日益激烈的市场竞争和复杂多变的客户需求。为了提高生产效率、优化资源配置、降低车间成本并提升管理效率,越来越多的铸造加工企业选择引入ERP软件来辅助企业管理。 ERP,即企业资源计划,是一…

堆叠与集群

8.1堆叠与集群概述 随着企业的发展,企业网络的规模越来越大,这对企业网络提出了更高的要求:更高的可靠性、更低的故障恢复时间、设备更加易于管理等。传统的园区网高可靠性技术出现故障时切换时间很难做到毫秒级别、实现可靠性的方案通常为一…

免费升级https的方式(含教学)

背景:随着现在全民网络安全意识的日益提升,各个网站实现的https数量也随之提升,那么如何将原本网站的http访问方式升级为https呢?下面均为干货内容。 目录 http访问和https访问的区别: 实现https后有哪些好处&#x…

C++命名规则

如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一、带层次结构、清晰明了的命名准则就是必不可少而且非常好用的工具。 活跃在生物学、化学、军队、监狱、黑社会、恐怖组织等各个领域内的大量有识先辈们都曾经无数次地以实际行动证明了以上公理的…

【Java Web基础】一些网页设计基础(三)

文章目录 1. 导航栏样式进一步调整2. 入驻企业信息展示栏2.1 Title设置2.2 具体信息添加 3. 轮播图4. 注册登录按钮及其他信息5. 一些五颜六色的、丰富视觉效果的中间件…… 1. 导航栏样式进一步调整 这种导航栏,选中的时候字体变蓝色,可能还是不够美观&…

【项目实践】VS配置Qt

文章目录 前言版本使用具体步骤1)安装Qt或者添加删除组件2)VS安装Qt Visual Studio Tools 如何使用遇到的问题双击ui文件编辑报错 前言 最近因为一个项目,需要使用Qt,本来想使用Python的,但是由于另外一个第三方的库是…

C 多维数组

C 语言支持多维数组。多维数组声明的一般形式如下: type name[size1][size2]...[sizeN];例如,下面的声明创建了一个三维 5 . 10 . 4 整型数组: int threedim[5][10][4];二维数组 多维数组最简单的形式是二维数组。一个二维数组&#xff0c…

Qt/C++监控推流设备推流/延迟极低/实时性极高/rtsp/rtmp推流/hls/flv/webrtc拉流/调整分辨率降低带宽

一、前言 算下来这个推流的项目作品写了有四年多了,最初第一个版本只有文件点播的功能,用的纯QTcpSocket通信实现,属于比较简单的功能。由于文件点播只支持文件形式的推流,不支持网络流或者本地设备采集,所以迫切需要…

2024Python计算机二级7

带符号的定点数之中,正数的原码、补码和反码均相同,负数的反码是对该数的原码除符号位外各位取反,补码是在该数的反码的最后(即最右边)一位上加1;不管是正数还是负数,其补码的符号位取反即是偏移…

H6603实地架构降压芯片100V耐压 80V 72V 60V 48V单片机/模块供电应用

H6603 是一款内置功率 MOSFET降压开关转换器。在宽输入范围内,其最大持续输出电流 0.8A,具有极好的负载和线性调整率。电流控制模式提供了快速瞬态响应,并使环路更易稳定。故障保护包括逐周期限流保护和过温保护。H6603 最大限度地减少了现有…

智能驾驶域控制器行业介绍

汽车智能驾驶功能持续高速渗透,带来智能驾驶域控制器市场空间快速增 长。智驾域控制器是智能驾驶决策环节的重要零部件,主要功能为处理感知 信息、进行规划决策等。其核心部件主要为计算芯片,英伟达、地平线等芯 片厂商市场地位突出。随着消费…

ECharts5 应用篇

跨平台方案 服务端渲染 服务端 SVG 渲染 5.3.0 里新引入了零依赖的服务端 SVG 字符串渲染方案: // 服务端代码 const echarts require(echarts);// 在 SSR 模式下第一个参数不需要再传入 DOM 对象 let chart echarts.init(null, null, {renderer: svg, // 必须使用…

(C语言) print输出函数系列介绍

(C语言) print输出函数系列介绍 文章目录 (C语言) print输出函数系列介绍前言输出系列函数🖨️printf🖨️sprintf & snprintf🖨️fprintf🖨️vprintf🖨️dprintf🖨️puts🖨️fputs&#x1f…

Spring6--IOC反转控制 / 基于XML管理bean

1. 容器IOC 先理解概念,再进行实际操作。概念比较偏术语化,第一次看可能看不懂,建议多看几遍,再尝试自己独立复述一遍,效果会好些 1.1. IOC容器 1.1.1. 控制反转(IOC) IOC (Inversion of Con…