对不起,同性恋者。我忘了告诉你安装旧版本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+/-.
谁能帮我?请。我怎么这么傻??
让我们提醒您基于 Debian 的发行版的两个基本要素:它们基于及时的快照,并且它们不是黑匣子。
及时快照:版本中的所有软件都基于一组依赖项。这些依赖关系无法更改。更改发生在下一个快照(发布)期间。
gcc 是许多其他软件包的依赖项——更改它会破坏您的系统...正如您所发现的。拯救系统的唯一解决方案是将 gcc 更改回适合该 Ubuntu 版本的版本。
不是黑匣子:操作系统使用与许多应用程序相同的工具和依赖项。操作系统和应用程序之间的界限很模糊。当您更改关键依赖项时,您会破坏应用程序......以及操作系统。
您可以有多个版本的 gcc 或任何其他关键依赖项吗?当然。但你必须非常小心:你正处于破坏系统的边缘。就像悬崖边缘一样,预防措施是明智的。
/usr/local/
)直接在您的发行版上安装古老的软件从来都不是首选方法。GCC 5.5已有 6 年多的历史,因此被认为是过时的。
对历史软件版本的实验最好在容器或虚拟机中进行,使用与您要测试的旧软件的时期相匹配的来宾操作系统。在这种情况下,Ubuntu 16.04 的容器化副本可能是测试此功能的更好环境。
无论如何,正如 @user535733 正确指出的那样,在基本系统上安装不兼容的软件很可能会破坏它。
另外,在 Ubuntu 22.04 上,只有 GCC 11(默认)和 GCC 10(在 Universe 中向后移植)是兼容版本。
这听起来像是一个 XY 问题。为什么要这么旧版本的gcc?您在问题中没有解释这一点,因此很难直接解决这个问题。您可能最好弄清楚为当前 gcc 提供哪些选项以获得相同的结果。
正如其他答案中所解释的,在旧存储库中安装 gcc 的回溯版本是一个非常糟糕的主意。即使您更改为受支持的 gcc 版本,更改系统默认 gcc 也会破坏内核更新和驱动程序构建。只是不要这样做。
替代方案是:
使用旧软件很少是合理的。我见过的唯一有效的理由是测试旧软件中的错误。如果您不是在寻找旧的错误,那么您就不应该使用旧的软件,而应该弄清楚如何使用当前的软件。