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


推荐阅读
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • OpenCV4.5.0+contrib编译流程及解决错误方法
    本文介绍了OpenCV4.5.0+contrib的编译流程,并提供了解决常见错误的方法,包括下载失败和路径修改等。同时提供了相关参考链接。 ... [详细]
  • 本文介绍了在Linux系统下进行文件压缩与解压的常用命令,包括tar命令的基本使用和参数,以及gzip、bz2、compress、rar和zip等不同格式的压缩与解压方法。同时还提供了常见的压缩文件后缀名及对应的解压命令,方便用户进行文件的压缩和解压操作。 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • 该ROM为红米3S3X手机提供了最强大的自定义功能,包括美观流畅的界面、全新的起航动画、魔幻的动画效果以及冰箱冻结功能。同时,还提供了高级设置,包括悬浮窗口显示自定义、WIFI密码查看器、S8炫酷跑马灯显示自定义等多项实用功能。此外,该ROM还优化了手机的待机时间、wifi连接速度,并支持状态栏实时网速显示和电池电量百分比显示。 ... [详细]
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社区 版权所有