【Linux】Ubuntu22.04版本下实现gcc版本的快速切换

这篇具有很好参考价值的文章主要介绍了【Linux】Ubuntu22.04版本下实现gcc版本的快速切换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文将介绍如何在Ubuntu22.04版本下实现gcc版本的快速切换。

本文首发于 ❄️慕雪的寒舍

前言

有的时候,不同版本的gcc会造成一些细微的差异,导致相关的一些工具不兼容,比如用于单元测试覆盖率生成的gcov/lcov工具,在不同的gcc版本下可能会出现不同的结果。

为了确定是否是gcc编译器版本不同造成的这些差异,有的时候需要在一台主机上装多个版本的gcc,不停的切换以测试问题。

假设我们的ubuntu主机上安装了gcc 11.4 版本和 gcc 9.5 版本,且当前gcc命令指向的是 11.4 版本,那么你可以使用gcc-9命令来使用9.5版本的gcc。

但是,对于一些已经写死使用gcc这个命令的脚本或编译工具而言,它们就不是那么好修改gcc为gcc-9的,我们需要做的就是让系统的gcc命令能在11.4版本和9.5版本之间进行切换

其中一个办法是手动替换gcc和g++的命令软连接,但是这个方法并不方便,ubuntu下有更好的操作,请看下文。

安装gcc9.5

默认情况下,ubuntu22.04安装的gcc版本是11.4

> gcc --version          
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

先给你的主机安装上gcc9.4版本

sudo apt install gcc-9 g++-9

安装之后,你应该可以通过gcc-9命令来使用9.5版本的gcc了

> g++-9 --version
g++-9 (Ubuntu 9.5.0-1ubuntu1~22.04) 9.5.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

配置update-alternatives

我们可以将11和9版本添加到update-alternatives工具中,就可以方便的切换,不需要手动设置命令的软连接。

工具基本使用命令

如下是工具使用的一个基本示例

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 20 --slave /usr/bin/g++ g++ /usr/bin/g++-11
  1. --install 代表我们需要注册一个新的服务名
  2. /usr/bin/gcc 代表我们目标的最终地址,切换软链接的时候会切换该地址的软链接
  3. gcc代表我们用于管理服务的名字
  4. /usr/bin/gcc-11 代表被管理的命令的绝对路径(会用这个命令来替换第二个参数的软链接)
  5. 20 代表优先级,数字越大优先级越高。
  6. --slave 代表从属命令,参数顺序和前面这几个是一样的,配置的是g++命令

在update-alternatives命令的帮助中可以看到install和slave的关系,slave命令就是跟着install命令来使用的

 --install <link> <name> <path> <priority>
    [--slave <link> <name> <path>] ...
                           add a group of alternatives to the system.

它是什么意思呢?其实就是让主从命令有一个对应关系:当我们把gcc命令切换成11版本后,作为slave的g++命令也会跟着一起变化。

slave可以添加多个,后文会做演示。

添加gcc版本配置

使用如下命令查看当前可以用来直接替换gcc的版本号,会发现么有,因为两个gcc版本都没有加入到这个工具中。

> sudo update-alternatives --config gcc
update-alternatives: error: no alternatives for gcc

使用如下命令查看一下当前装好的gcc包,可以看到有gcc 11和9。

> dpkg -l | grep gcc
ii  gcc                               4:11.2.0-1ubuntu1                                               amd64        GNU C compiler
ii  gcc-11                            11.4.0-1ubuntu1~22.04                                           amd64        GNU C compiler
ii  gcc-11-base:amd64                 11.4.0-1ubuntu1~22.04                                           amd64        GCC, the GNU Compiler Collection (base package)
ii  gcc-12-base:amd64                 12.3.0-1ubuntu1~22.04                                           amd64        GCC, the GNU Compiler Collection (base package)
ii  gcc-9                             9.5.0-1ubuntu1~22.04                                            amd64        GNU C compiler
ii  gcc-9-base:amd64                  9.5.0-1ubuntu1~22.04                                            amd64        GCC, the GNU Compiler Collection (base package)
ii  lib32gcc-s1                       12.3.0-1ubuntu1~22.04                                           amd64        GCC support library (32 bit Version)
ii  libgcc-11-dev:amd64               11.4.0-1ubuntu1~22.04                                           amd64        GCC support library (development files)
ii  libgcc-9-dev:amd64                9.5.0-1ubuntu1~22.04                                            amd64        GCC support library (development files)
ii  libgcc-s1:amd64                   12.3.0-1ubuntu1~22.04                                           amd64        GCC support library

执行如下命令将gcc-9添加到update-alternatives工具中,让我们可以通过config来切换gcc版本

> sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 20 --slave /usr/bin/g++ g++ /usr/bin/g++-9
update-alternatives: using /usr/bin/gcc-9 to provide /usr/bin/gcc (gcc) in auto mode

使用如下命令查看可切换的gcc版本,因为当前只给工具里添加了一个gcc-9版本,所以会显示only one alternative,即只有一个可选项的意思,工具会认为没有啥好配置的。

> sudo update-alternatives --config gcc
There is only one alternative in link group gcc (providing /usr/bin/gcc): /usr/bin/gcc-9
Nothing to configure.

这时候我们可以把原本安装好的11.4版本的gcc也给添加到这个工具里面。优先级的数字可以根据你的情况自行调整

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 25 --slave /usr/bin/g++ g++ /usr/bin/g++-11

切换gcc版本成功

然后再次执行sudo update-alternatives --config gcc,此时就能看到两个版本的可选项了。

> sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-9    20        auto mode
  1            /usr/bin/gcc-11   20        manual mode
  2            /usr/bin/gcc-9    20        manual mode

Press <enter> to keep the current choice[*], or type selection number:

键入序号来选择你需要切换的gcc版本,回车即可

> gcc --version
gcc (Ubuntu 9.5.0-1ubuntu1~22.04) 9.5.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

可以看到,当前的系统gcc已经被换成了9.5版本的了,切换成功!而且因为我们通过--slave配置了g++命令的替换操作,所以g++的版本也跟着一起替换成9.5了

> g++ --version
g++ (Ubuntu 9.5.0-1ubuntu1~22.04) 9.5.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

将gcc换回gcc 11版本是相同的操作,这里不再赘述。

添加多个slave

和gcc捆绑的还有一个用于分支覆盖率检测的gcov命令,我们同样可以通过--slave选项将其绑定到版本中,让gcov的命令版本也会更着gcc版本一同切换

> sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 25 --slave /usr/bin/g++ g++ /usr/bin/g++-11 --slave /usr/bin/gcov gcov /usr/bin/gcov-11
update-alternatives: updating alternative /usr/bin/gcc-11 because link group gcc has changed slave links

> sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 20 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9

此时使用sudo update-alternatives --config gcc切换gcc版本后,gcov命令的版本也会跟着变化。这样我们能保证gcov和gcc版本是一致的,不会出现不一致导致的兼容性问题。

> gcov --version
gcov (Ubuntu 9.5.0-1ubuntu1~22.04) 9.5.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or 
FITNESS FOR A PARTICULAR PURPOSE.

从工具中删除gcc版本

如果需要从这个工具中删除某个版本,执行如下命令

sudo update-alternatives --remove gcc /usr/bin/gcc-9 

删除后就无法通过该工具切换gcc版本为9了。文章来源地址https://www.toymoban.com/news/detail-813552.html

到了这里,关于【Linux】Ubuntu22.04版本下实现gcc版本的快速切换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu22.04 交叉编译gcc9.5 for arm

    环境:ubuntu22.04为刚刚安装,未安装gcc等包 vi ~/.bashrc输入 保存,reboot 安装: 将/opt/gmp-6.1.0/install/lib目录下所有库文件拷贝到gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/, 然后执行 删除cc 然后安装一些库,要不然编译不过 然后执行 问题:Oops, mp_limb_t is 64 bits,

    2024年02月08日
    浏览(41)
  • ubuntu22.04 linux内核5.19版本安装usb无线网卡驱动(linux小白)

    居住环境原因,台式机(Ubuntu22.04系统)没办法连网线,需要无线网卡。 1.经上网查询,买了绿联AC1300 双频无线网卡,支持内核5.15版本以下。 2.在绿联官网下载驱动,如下图,安装过程发现缺少 linux/net/ipx文件。  3.经 ubuntu linux内核版本>5.15安装usb无线网卡驱动_linux 内核5

    2024年02月15日
    浏览(48)
  • Linux 之七 Ubuntu 22.04 配置内核版本、GRUB 引导、远程桌面、包后缀(-dev、-dbg等)、Ubuntu 阶段更新

      前段时间重新安装了 Ubuntu 22.04 LTS,安装后没有显示 GRUB 引导页面(默认自动跳过),直接使用默认内核启动,而我需要变更一下默认的内核版本,特此记录一下修改过程。   Ubuntu 中安装其他版本的内核非常简单,内核其实就是相当于一个软件(DEB 包),安装方式与

    2024年02月12日
    浏览(56)
  • Linux 之十八 Ubuntu 22.04 配置内核版本、GRUB 引导、远程桌面、包后缀(-dev、-dbg等)、Ubuntu 阶段更新

      前段时间重新安装了 Ubuntu 22.04 LTS,安装后没有显示 GRUB 引导页面(默认自动跳过),直接使用默认内核启动,而我需要变更一下默认的内核版本,特此记录一下修改过程。   Ubuntu 中安装其他版本的内核非常简单,内核其实就是相当于一个软件(DEB 包),安装方式与

    2024年02月07日
    浏览(60)
  • ubuntu 22.04版本安装

    Ubuntu 22.04安装 1、学习环境下安装ubuntu 22.04版本。 Linux:ubuntu 22.04。 学习环境:VMware虚拟机。 系统镜像:ubuntu 22.04。 2、开始安装ubuntu。 1)开启虚拟机,点击文件,新建虚拟机。 2)选择高级,然后下一步。 3)选择硬件兼容性。 4)安装客户机系统。 5)选择虚拟机中所安装

    2023年04月10日
    浏览(46)
  • Ubuntu 22.04 版本的网络配置

    Ubuntu 22.04 版本是一款强大的操作系统,它提供了广泛的网络配置选项,包括网络连接、路由设置、DNS 配置和防火墙配置等。在这篇博客中,我们将仔细介绍关于 Ubuntu 22.04 版本的网络配置。 网络连接配置 在安装 Ubuntu 22.04 后,通常需要配置网络连接以便访问互联网。有两种

    2024年02月09日
    浏览(40)
  • Ubuntu16.04 切换系统python和gcc版本

    ubuntu16.04中的gcc版本及版本切换 或者

    2024年04月12日
    浏览(38)
  • Ubuntu 22.04版本设置静态IP

    在Ubuntu 20.04中设置静态IP的步骤如下: 打开终端并输入以下命令以编辑网络配置文件: 文件中应该有以下内容: 其中“enp0s3”是网卡的名称 将内容替换为: 保存并关闭文件。 输入以下命令以应用更改: 确认静态ip是否设置成功:

    2024年02月13日
    浏览(47)
  • 【ubuntu|内核】ubuntu 22.04修改内核为指定版本

    every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?type=blog ubuntu 22.04 安装指定内核 查看已安装的内核镜像 安装镜像 安装内核头文件 安装内核模块 安装驱动 出现问题修复: 检查是否安装成功 安装完成后修改配置 找到GRUB_DEFAULT=0,修改为: 保存退出后:

    2024年02月04日
    浏览(48)
  • ubuntu 22.04 安装最新版本的 nodejs

    参考资料:How To Install Node.js on Ubuntu 20.04 采用其中的第二个方法: 注意, sudo apt install nodejs 这步可能出现问题: 解决方法: sudo dpkg -i --force-overwrite /var/cache/apt/archives/*.deb 这条命令的意思是使用sudo权限来强制安装/var/cache/apt/archives/目录下的所有.deb文件。 sudo是一个命令,它

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包