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.hqwc.cn/news/538085.html

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

相关文章

Tensorflow笔记(二):常用函数2、激活函数、优化器等、神经网络模型实现(商品销量预测)

import tensorflow as tf import numpy as np from tqdm import tqdm# ----------------------------- tensor常用函数2 ----------------------------------- a tf.constant([1, 2, 3, 1, 2]) b tf.constant([0, 1, 3, 4, 5]) c tf.where(tf.greater(a, b), a, b) # 若a&g…

采购代购系统独立站,接口采集商品上货

采购代购系统独立站的建设与商品上货接口的采集是一个综合性的项目,涉及前端开发、后端开发、数据库设计以及API接口的对接等多个环节。以下是一个大致的步骤和考虑因素: 一、系统规划与需求分析 明确业务需求:确定代购系统的核心功能&…

尚硅谷SpringBoot项目--微头条实战(有完整项目代码)

目录 项目模块 技术栈 功能展示 环境搭建 前端环境搭建: 后端环境搭建: 数据库创建: (建议使用数据库软件操作) springboot项目搭建: mybatis-plus逆向工程 后端功能开发 用户模块开发 jwt 与…

基于SpringBoot的“实验室管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“实验室管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 注册界面 实验室界面 设备界面图 消耗…

使用Python批量实现在Excel里新加一列

目录 一、引言 二、所需库介绍 三、代码实现 四、批量处理多个Excel文件 五、注意事项与扩展 六、案例演示 七、总结与展望 一、引言 Excel作为广泛使用的电子表格软件,在数据处理和分析中扮演着重要角色。然而,当面对大量Excel文件需要批量处理…

【六】【算法分析与设计】二分查找

69. x 的平方根 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示…

玩转 Spring 状态机:更优雅的实现订单状态流转

说起 Spring 状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring 状态机就是状态模式的一种实现,在介绍 Spring 状态机之前,让我们来看看设计模式中的状态模式。 1. 状态模式 状态模式…

如何使用vue定义组件之——子组件调用父组件数据

1.定义父子模板template <div class"container"><my-father></my-father><my-father></my-father><my-father></my-father><!-- 此处无法调用子组件&#xff0c;子组件必须依赖于父组件进行展示 --><!-- <my-…

数据结构:图及相关算法讲解

图 1.图的基本概念2. 图的存储结构2.1邻接矩阵2.2邻接表2.3两种实现的比较 3.图的遍历3.1 图的广度优先遍历3.2 图的深度优先遍历 4.最小生成树4.1 Kruskal算法4.2 Prim算法4.3 两个算法比较 5.最短路径5.1两个抽象存储5.2单源最短路径--Dijkstra算法5.3单源最短路径--Bellman-…

【Git版本控制系统】:起步

目录 前言 版本控制 集中式与分布式的区别 Windows安装Git 核心 文件状态 工作区域 基本工作流程 配置用户信息 获取帮助 在线资源 前言 本篇文件的环境是Windows环境下实现。 在日常工作中git少不了&#xff0c;所以编写本篇文章介绍Git基础&#xff0c;专栏会不…

unicloud JQL数据库操作介绍

JQL数据库操作 JQL&#xff0c;全称 javascript query language&#xff0c;是一种js方式操作数据库的规范。 JQL大幅降低了js工程师操作数据库的难度&#xff0c;比SQL和传统MongoDB API更清晰、易掌握。JQL支持强大的DB Schema&#xff0c;内置数据规则和权限。DB Schema 支…

与结构数列顺序有关的两个方程组

已知一组4点的结构数列顺序为&#xff0c; 方程组41 (5*x1)/5.0r1 (2*x23*x3)/5.0r2 (4*x21*x8)/5.0r3 (3*x32*x5)/5.0r4 (5*x5)/5.0r5 (4*x31*x14)/5.0r6 (1*x13*x41*x16)/5.0r7 (2*x32*x71*x10)/5.0r8 (2*x53*x7)/5.0r9 (2*x23*x10)/5.0r10 (2*x42*x91*x11)/5.0r11…