不好意思各位同志们,我忘了告诉你们安装旧版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,而不是更改系统默认值。环境模块包使这变得简单。
- 安装适当版本的容器化操作系统(如其他答案所建议的那样,但这会占用大量内存和磁盘空间,但这可能是最简单的选择)
使用旧软件很少是合理的。我见过的唯一合理理由是测试旧软件中的错误。如果你不想寻找旧错误,你就不应该使用旧软件,而应该弄清楚如何使用当前软件。