热门标签 | 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;指定软件名


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
  • CentOS系统安装与配置常见问题及解决方案
    本文详细介绍了在CentOS系统安装过程中遇到的常见问题及其解决方案,包括Vi编辑器的操作、图形界面的安装、网络连接故障排除等。通过本文,读者可以更好地理解和解决这些常见问题。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文介绍如何通过更改软件源来提前体验Ubuntu 8.10,包括详细的配置步骤和相关注意事项。 ... [详细]
  • 当在 Android 应用中使用 NDK 时,可能会遇到 java.lang.UnsatisfiedLinkError: Native method not found 的错误。本文将详细探讨该错误的原因及解决方案。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • CentOS 6.5 上安装 MySQL 5.7.23 的详细步骤
    本文详细介绍如何在 CentOS 6.5 系统上成功安装 MySQL 5.7.23,包括卸载旧版本、下载安装包、配置文件修改及启动服务等关键步骤。 ... [详细]
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社区 版权所有