如何在ubuntu中安装gcc-5.5?如何在ubuntu中任意切换gcc版本?

如何在ubuntu中安装gcc-5.5?如何在ubuntu中任意切换gcc版本?

不好意思各位同志们,我忘了告诉你们安装旧版gcc的用途了,因为我需要用到gpgpu-sim这个软件(https://github.com/gpgpu-sim/gpgpu-sim_distribution)来模拟GPU,有可能需要它来实现论文中的一些内容。

当我sudo apt install gcc-5.5在终端输入时,它只显示以下图片:

➜  ZhouPengfei sudo apt-get install gcc-5.5 g++-5.5 gcc-11.4 g++-11.4
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package gcc-5.5
E: Couldn't find any package by glob 'gcc-5.5'
E: Couldn't find any package by regex 'gcc-5.5'
E: Unable to locate package g++-5.5
E: Couldn't find any package by glob 'g++-5.5'
E: Couldn't find any package by regex 'g++-5.5'
E: Unable to locate package gcc-11.4
E: Couldn't find any package by glob 'gcc-11.4'
E: Couldn't find any package by regex 'gcc-11.4'
E: Unable to locate package g++-11.4
E: Couldn't find any package by glob 'g++-11.4'
E: Couldn't find any package by regex 'g++-11.4'

在此处输入图片描述

所以我尝试从 Web 手动安装http://archive.ubuntu.com/ubuntu/pool/universe/g/。我从网站安装这些文件:

➜  gcc-5 ll
total 28M
cpp-5_5.5.0-12ubuntu1_amd64.deb
g++-5_5.5.0-12ubuntu1_amd64.deb
gcc-5_5.5.0-12ubuntu1_amd64.deb
gcc-5-base_5.5.0-12ubuntu1_amd64.deb
libasan2_5.5.0-12ubuntu1_amd64.deb
libcilkrts5_7.5.0-6ubuntu2_amd64.deb
libgcc-5-dev_5.5.0-12ubuntu1_amd64.deb
libisl15_0.18-4_amd64.deb
libmpx0_5.5.0-12ubuntu1_amd64.deb
libstdc++-5-dev_5.5.0-12ubuntu1_amd64.deb
libubsan0_7.5.0-6ubuntu2_amd64.deb

我使用 dpkg 来安装它sudo dpkg -i *.deb。它显示一些内容:

(Reading database ... 222015 files and directories currently installed.)
Preparing to unpack cpp-5_5.5.0-12ubuntu1_amd64.deb ...
Unpacking cpp-5 (5.5.0-12ubuntu1) over (5.5.0-12ubuntu1) ...
Selecting previously unselected package g++-5.
Preparing to unpack g++-5_5.5.0-12ubuntu1_amd64.deb ...
Unpacking g++-5 (5.5.0-12ubuntu1) ...
Selecting previously unselected package gcc-5.
Preparing to unpack gcc-5_5.5.0-12ubuntu1_amd64.deb ...
Unpacking gcc-5 (5.5.0-12ubuntu1) ...
Preparing to unpack gcc-5-base_5.5.0-12ubuntu1_amd64.deb ...
Unpacking gcc-5-base:amd64 (5.5.0-12ubuntu1) over (5.5.0-12ubuntu1) ...
Preparing to unpack libasan2_5.5.0-12ubuntu1_amd64.deb ...
Unpacking libasan2:amd64 (5.5.0-12ubuntu1) over (5.5.0-12ubuntu1) ...
Selecting previously unselected package libcilkrts5:amd64.
Preparing to unpack libcilkrts5_7.5.0-6ubuntu2_amd64.deb ...
Unpacking libcilkrts5:amd64 (7.5.0-6ubuntu2) ...
Selecting previously unselected package libgcc-5-dev:amd64.
Preparing to unpack libgcc-5-dev_5.5.0-12ubuntu1_amd64.deb ...
Unpacking libgcc-5-dev:amd64 (5.5.0-12ubuntu1) ...
Preparing to unpack libisl15_0.18-4_amd64.deb ...
Unpacking libisl15:amd64 (0.18-4) over (0.18-4) ...
Preparing to unpack libmpx0_5.5.0-12ubuntu1_amd64.deb ...
Unpacking libmpx0:amd64 (5.5.0-12ubuntu1) over (5.5.0-12ubuntu1) ...
Selecting previously unselected package libstdc++-5-dev:amd64.
Preparing to unpack libstdc++-5-dev_5.5.0-12ubuntu1_amd64.deb ...
Unpacking libstdc++-5-dev:amd64 (5.5.0-12ubuntu1) ...
Selecting previously unselected package libubsan0:amd64.
Preparing to unpack libubsan0_7.5.0-6ubuntu2_amd64.deb ...
Unpacking libubsan0:amd64 (7.5.0-6ubuntu2) ...
Setting up gcc-5-base:amd64 (5.5.0-12ubuntu1) ...
Setting up libasan2:amd64 (5.5.0-12ubuntu1) ...
dpkg: dependency problems prevent configuration of libcilkrts5:amd64:
 libcilkrts5:amd64 depends on gcc-7-base (= 7.5.0-6ubuntu2); however:
  Package gcc-7-base is not installed.

dpkg: error processing package libcilkrts5:amd64 (--install):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of libgcc-5-dev:amd64:
 libgcc-5-dev:amd64 depends on libcilkrts5 (>= 5.5.0-12ubuntu1); however:
  Package libcilkrts5:amd64 is not configured yet.

dpkg: error processing package libgcc-5-dev:amd64 (--install):
 dependency problems - leaving unconfigured
Setting up libisl15:amd64 (0.18-4) ...
Setting up libmpx0:amd64 (5.5.0-12ubuntu1) ...
dpkg: dependency problems prevent configuration of libstdc++-5-dev:amd64:
 libstdc++-5-dev:amd64 depends on libgcc-5-dev (= 5.5.0-12ubuntu1); however:
  Package libgcc-5-dev:amd64 is not configured yet.

dpkg: error processing package libstdc++-5-dev:amd64 (--install):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of libubsan0:amd64:
 libubsan0:amd64 depends on gcc-7-base (= 7.5.0-6ubuntu2); however:
  Package gcc-7-base is not installed.

dpkg: error processing package libubsan0:amd64 (--install):
 dependency problems - leaving unconfigured
Setting up cpp-5 (5.5.0-12ubuntu1) ...
dpkg: dependency problems prevent configuration of g++-5:
 g++-5 depends on libstdc++-5-dev (= 5.5.0-12ubuntu1); however:
  Package libstdc++-5-dev:amd64 is not configured yet.

dpkg: error processing package g++-5 (--install):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of gcc-5:
 gcc-5 depends on libgcc-5-dev (= 5.5.0-12ubuntu1); however:
  Package libgcc-5-dev:amd64 is not configured yet.

dpkg: error processing package gcc-5 (--install):
 dependency problems - leaving unconfigured
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.5) ...
Errors were encountered while processing:
 libcilkrts5:amd64
 libgcc-5-dev:amd64
 libstdc++-5-dev:amd64
 libubsan0:amd64
 g++-5
 gcc-5

虽然在这个过程中提示了很多错误,但是当我执行下一条命令时,就安装成功了:

  • sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 30
  • sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 30

并显示:

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

➜ gcc-5 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 30
update-alternatives: using /usr/bin/g++-5 to provide /usr/bin/g++ (g++) in auto mode

我输入gcc --version,它显示:

gcc-5 gcc --version
gcc (Ubuntu 5.5.0-12ubuntu1) 5.5.0 20171010
Copyright (C) 2015 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.

当我输入后g++ --version,它显示:

➜  gcc-5 g++ --version
g++ (Ubuntu 5.5.0-12ubuntu1) 5.5.0 20171010
Copyright (C) 2015 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-5.5有问题,如果再要安装其他软件,就需要执行sudo apt --fix-broken install修复这个问题,但结果就是刚刚安装的gcc又被卸载了。

显然,我无法自由切换 gcc 版本。有人能帮帮我吗?我快要被折磨疯了。我一直在谷歌上搜索这些问题的解决方案,但没有找到一个对我有用的解决方案,我不知道我是否在某个地方遇到了致命错误。

我的系统存在以下问题:

➜  gcc-5 neofetch
            .-/+oossssoo+/-.               graduation_project@moonlight01 
        `:+ssssssssssssssssss+:`           ------------------------------ 
      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 22.04.3 LTS x86_64 
    .ossssssssssssssssssdMMMNysssso.       Host: ThinkSystem SR650 -[7X06CTO1WW]- 07 
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Kernel: 6.2.0-37-generic 
  +ssssssssshmydMMMMMMMNddddyssssssss+     Uptime: 8 days, 5 hours, 21 mins 
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Packages: 1849 (dpkg), 11 (snap) 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Shell: zsh 5.8.1 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Resolution: 1024x768 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   Terminal: /dev/pts/0 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   CPU: Intel Xeon Silver 4216 (64) @ 799MHz 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   GPU: NVIDIA Tesla T4 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Memory: 8182MiB / 128281MiB 
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
  +sssssssssdmydMMMMMMMMddddyssssssss+                             
   /ssssssssssshdmNNNNmyNMMMMhssssss/                              
    .ossssssssssssssssssdMMMNysssso.
      -+sssssssssssssssssyyyssss+-
        `:+ssssssssssssssssss+:`
            .-/+oossssoo+/-.

谁能帮帮我?拜托。我怎么这么笨?

答案1

让我们提醒您基于 Debian 的发行版的两个基本要素:它们基于时间快照,并且它们不是黑匣子。

  • 每个操作系统 (OS) 都有不同的元素和不同的限制。因此,任何操作系统的改变都涉及学习曲线。Ubuntu 从未声称可以替代其他操作系统。

时间快照:发布中的所有软件都基于一组依赖项。这些依赖项无法更改。更改将在下一个快照(发布)期间发生。

gcc 是许多其他软件包的依赖项 - 更改它会破坏您的系统...正如您所发现的。拯救系统的唯一解决方案是将 gcc 改回适合该 Ubuntu 版本的版本。

不是黑匣子:操作系统使用的工具和依赖项与许多应用程序相同。操作系统和应用程序之间的界限很模糊。当您更改关键依赖项时,您会破坏应用程序……操作系统也会破坏。


您是否可以拥有多个版本的 gcc 或任何其他关键依赖项?当然可以。但您必须非常小心:您的系统即将崩溃。就像悬崖边缘一样,谨慎行事是明智的。

  • 不要改变默认值。
  • 考虑使用非 Deb 方法安装其他版本,或许安装到其他位置(例如/usr/local/
  • 了解如何安全地恢复更改。
  • 备份。

答案2

直接在您的发行版上安装古老的软件绝不是一个好的选择。GCC 5.5已有 6 年多历史,因此被认为是过时的。

最好在容器或虚拟机中对历史软件版本进行实验,并使用与要测试的旧软件时期相匹配的客户操作系统。在这种情况下,Ubuntu 16.04 的容器化副本可能是测试此问题的更好环境。

无论如何,正如@user535733 正确指出的那样,在基础系统上安装不兼容的软件很可能会破坏它。

并且为了保险起见:在 Ubuntu 22.04 上,只有 GCC 11(默认)和 GCC 10(在 Universe 中反向移植)是兼容版本。

答案3

这听起来像是一个 XY 问题。你为什么想要这么老版本的 gcc?你没有在问题中解释这一点,所以很难直接解决这个问题。你最好弄清楚要给当前的 gcc 提供哪些选项才能获得相同的结果。

正如其他答案所解释的那样,从旧存储库安装过时的 gcc 版本是一个非常糟糕的主意。即使您更改为受支持的 gcc 版本,更改系统默认 gcc 也会破坏内核更新和驱动程序构建。千万不要这么做。

替代方案有:

  • 手动编译 gcc 并将其安装在 /usr/local/gcc-$version 或 /opt/gcc-$version 中(这需要大量工作!!)
  • 更改构建选项(可能使用环境变量)以使用备用 gcc,而不是更改系统默认值。环境模块包使这变得简单。
  • 安装适当版本的容器化操作系统(如其他答案所建议的那样,但这会占用大量内存和磁盘空间,但这可能是最简单的选择)

使用旧软件很少是合理的。我见过的唯一合理理由是测试旧软件中的错误。如果你不想寻找旧错误,你就不应该使用旧软件,而应该弄清楚如何使用当前软件。

相关内容