热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gcc特定版本Linux源码编译安装(以gcc8.5.0为例)

0.确认基本编译工具已安装,退出其他管理环境下载基本编译工具:sudoaptinstallbuild-essential这会默认配置某一个版本的gc

0. 确认基本编译工具已安装,退出其他管理环境

下载基本编译工具:sudo apt install build-essential

这会默认配置某一个版本的gcc环境,后续编译新的gcc环境也需要它。

退出其他管理环境,如 conda

1. 下载所需版本源码

官方镜像站点目录
清华镜像地址
gcc-8.5.0.tar.gz CSDN下载

使用 tar -zxvf 文件名.tar.gz 进行解压,该解压后的文件夹之后称为 “gcc源码文件夹

2. 下载依赖包源码

不同版本gcc所需依赖库不尽相同,具体可以进入gcc源码文件夹中 contrib/download_prerequisites 文件中查看,如 gcc-8.5.0 的该文件中有以下内容:

gmp='gmp-6.1.0.tar.bz2'
mpfr='mpfr-3.1.4.tar.bz2'
mpc='mpc-1.0.3.tar.gz'
isl='isl-0.18.tar.bz2'base_url='ftp://gcc.gnu.org/pub/gcc/infrastructure/'

说明需要上述列出的4个依赖包,且下载地址如上所列,如果上述地址不好访问,可以手动修改到其他镜像地址,如:

base_url = 'http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/'

上述是日本镜像地址,暂时没有该地址的内地镜像。

如果网络不佳,可以手动下载上述依赖包到gcc源码文件夹之下(建议版本相同),这里提供两种下载方式:

  1. 访问 gnu 镜像地址,依次进入相应文件夹,选择对应版本下载,如访问 清华镜像地址 ,进入gmp文件夹,选择gmp-6.1.0.tar.bz2下载
  2. Gitee 地址

下载好后在gcc源码文件夹中执行命令./contrib/download_prerequisites查看是否安装完好,正常将会输出以下内容:

gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.18.tar.bz2: OK
All prerequisites downloaded successfully.

如果有如下报错,可能是压缩软件不全所致:

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

只需执行 sudo apt install bzip2 即可。(CentOS系统执行 sudo yum install bzip2 )

此命令不仅会检查依赖包,还会同时解压、生成依赖包的软链接,如果没有执行此步,可以手动解压,并添加软链接,软链接名字为不带版本号的名字。 例如对 gmp-6.1.0 解压并生成软链接:

  1. 进入gcc源码文件夹,执行tar -vxf gmp-6.1.0.tar.bz2 解压,生成文件夹 gmp-6.1.0
  2. 执行ln -s gmp-6.1.0 gmp 生成名为gmp的软链接。


3. 编译安装gcc


3.1 创建build文件夹

进入gcc源码文件夹,创建build文件夹并进入:mkdir build && cd build

需要说明,build 文件夹并不是必须创建,但为了将编译生成的中间文件与源码文件隔离开,若是编译失败至少不会打乱源码内容,不得已时也可直接删除 build 文件夹,因此一般都建议单独创建一个文件夹并在其中进行编译。


3.2 配置编译方式

配置编译方式:../configure --prefix=/opt/gcc-8.5.0 --enable-languages=c,c++ --disable-multilib

其中 --prefix 指定gcc安装位置,可以自定义,如上述命令将在/opt下创建gcc-8.5.0文件夹并安装于此处。

–enable-languages 指定gcc支持的语言

–disable-multilib 表示不生成交叉编译器(如果均在一种架构平台上编译并运行,如x86上,则无需交叉编译器)

3.3 使用make编译并安装

sudo make -j8 && sudo make install

其中 -j8 表示 8线程同时编译,可以根据机器配置自行设置。

4. 使用update-alternatives将其配置为默认gcc工具

update-alternatives 是通过软链接实现的一款非常方便地软件版本管理工具。

首先将 gcc-8.5.0 注册其中:

sudo update-alternatives --install /usr/bin/gcc gcc /opt/gcc-8.5.0/bin/gcc 100 --slave /usr/bin/g++ g++ /opt/gcc-8.5.0/bin/g++ --slave /usr/bin/gcov gcov /opt/gcc-8.5.0/bin/gcov

此时查看并配置 gcc 版本,update-alternatives --config gcc,会显示如下:

There is only one alternative in link group gcc (providing /usr/bin/gcc): /opt/gcc-8.5.0/bin/gccNothing to configure.

即目前只注册了一个 gcc 版本,无需配置,再将系统本身的gcc注册其中(以gcc-11为例):

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 80 --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-11 --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-11 --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-11

再查看并配置 gcc 版本,sudo update-alternatives --config gcc

显示如下:

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).Selection Path Priority Status
------------------------------------------------------------
* 0 /opt/gcc-8.5.0/bin/gcc 100 auto mode1 /opt/gcc-8.5.0/bin/gcc 100 manual mode2 /usr/bin/gcc-11 80 manual mode&#xfeff;Press <enter> to keep the current choice[*], or type selection number:

只需在终端交互中输入相应的序号即可切换 gcc版本。&#xff08;0是auto mode&#xff0c;会自动选择优先级最高的版本&#xff09;


>>> update-alternatives 基本命令参数使用
--install 用于注册某个软件
  第一个参数表示注册到的位置&#xff0c;第二个参数表示在此管理工具下这个软件的名称&#xff0c;第三个参数表示优先级&#xff08;数字越大优先级越高&#xff09;&#xff0c;第四个参数表示软件的实际位置
--slave 用于设置和该软件依赖的其他软件&#xff0c;当改变软件版本时其依赖的软件版本也会相应改变
  slave的参数与 install 基本一致&#xff0c;只是没有优先级设置的参数
--display 用于查看软件的各种版本、优先级和依赖
  后接一个参数&#xff0c;指定软件名
--list 用于查看软件各版本的实际安装位置
  后接一个参数&#xff0c;指定软件名


推荐阅读
  • 在CentOS上部署并使用FFmpeg多媒体处理工具
    最近在进行音频处理时需要用到FFmpeg,本文将详细介绍如何在CentOS系统上部署并使用这一强大的多媒体处理工具。首先,从官方网站下载FFmpeg的最新版本,然后通过Xftp工具将下载的压缩包(如ffmpeg-4.3.1.tar.xz)传输到服务器上。接下来,解压文件并按照官方文档进行编译安装。安装完成后,可以通过命令行工具验证FFmpeg是否成功安装,并开始进行多媒体文件的转换和处理。此外,文章还将介绍一些常用的FFmpeg命令和参数,帮助用户快速上手。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • STAR: 转录组数据分析中的高效比对工具介绍
    欢迎关注“生信修炼手册”!STAR 是一款专为 RNA-seq 数据设计的高效比对工具,以其卓越的速度和高灵敏度著称。该软件在处理大规模转录组数据时表现出色,能够显著提高比对效率和准确性。此外,GATK 推荐使用 STAR 进行预处理步骤,以确保后续分析的可靠性。 ... [详细]
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案
    MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • 在网络故障排查中,tcpdump 是一款强大的工具,尤其在 Linux 环境下。尽管开发环境中问题较少,但在测试或生产环境中,往往会遇到各种难以预料的异常情况。通过在问题发生的环境中启用 tcpdump 进行抓包,并重现问题,可以获取到宝贵的原始数据,为问题的诊断提供关键线索。本文将详细介绍如何使用 tcpdump 进行实战操作,帮助读者掌握这一技能。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 本文深入探讨了使用Puppet进行软件包分发与管理的方法。首先介绍了fpm这一跨平台的软件包制作工具,其简便的操作流程使得软件包的创建变得轻松快捷。fpm的项目地址为:https://github.com/jordansissel/fpm。通过结合Puppet和fpm,可以实现高效、可靠的软件包管理和部署。 ... [详细]
  • 在Ubuntu 20.04 Linux系统中部署Git的详细步骤与最佳实践
    在Ubuntu 20.04 Linux系统中部署Git时,首先确保您的操作系统版本正确,并已以具备sudo权限的用户身份登录。推荐使用APT软件包管理器进行安装,这是最简便且可靠的方法。此外,遵循最佳实践,如定期更新Git版本和配置全局设置,可以进一步提升使用体验和安全性。 ... [详细]
  • 在Linux系统中,目录结构遵循文件系统层次标准(FHS),确保了系统的组织性和可维护性。其中,`/bin`目录是FHS要求必须存在的目录之一,主要存放了在单用户维护模式下仍可执行的基本命令和工具。这些命令不仅对root用户可用,普通用户也能使用,以确保系统在最小化运行状态下仍能进行基本的操作和管理。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 在 Ubuntu 系统上正确安装 NVIDIA 显卡驱动程序前,首先需要卸载已有的驱动版本。这一步骤至关重要,以避免新旧驱动冲突导致系统不稳定。接下来,可以通过官方仓库或 NVIDIA 官方网站下载最新驱动,并使用终端命令进行安装。确保在安装过程中启用适当的内核模块支持,以获得最佳性能和兼容性。此外,建议在安装后重启系统并验证驱动是否成功加载。 ... [详细]
author-avatar
常奕尧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有