升级到 Eoan 后,我有一些软件包被阻止,无法升级。这一切似乎都归结cpp
为gcc
:
$ sudo apt install gcc
The following packages have unmet dependencies:
gcc : Depends: cpp (= 4:9.2.1-3.1ubuntu1) but 4:8.3.0-1ubuntu3 is to be installed
Depends: gcc-9 (>= 9.2.1-1~) but it is not going to be installed
$ sudo apt install gcc-9
The following packages have unmet dependencies:
gcc-9 : Depends: cpp-9 (= 9.2.1-9ubuntu2) but it is not going to be installed
Depends: gcc-9-base (= 9.2.1-9ubuntu2) but 9.2.1-17ubuntu1~18.04.1 is to be installed
$ sudo apt install gcc-9-base
gcc-9-base is already the newest version (9.2.1-17ubuntu1~18.04.1).
我理解的不够深入,无法解释,但输出如下apt-cache
:
$apt-cache policy cpp
cpp:
Installed: 4:8.3.0-1ubuntu3
Candidate: 4:9.2.1-3.1ubuntu1
Version table:
4:9.2.1-3.1ubuntu1 500
500 http://archive.ubuntu.com/ubuntu eoan/main amd64 Packages
*** 4:8.3.0-1ubuntu3 100
100 /var/lib/dpkg/status
$apt-cache policy cpp-9
cpp-9:
Installed: (none)
Candidate: 9.2.1-9ubuntu2
Version table:
9.2.1-9ubuntu2 500
500 http://archive.ubuntu.com/ubuntu eoan/main amd64 Packages
有人可以帮我理解这里可能发生的事情吗?我已禁用除默认存储库以外的所有存储库,但均未成功。我还尝试手动安装似乎随 19.10 ( 9.2.1-9ubuntu2
) 一起提供的 gcc-9 版本,但这只会增加对伤害的侮辱,因为其他一切都想要9.2.1-17ubuntu1~18.04.1
这里的根本问题是某些软件包安装的版本比存储库中可用的版本新,并且因为它们中的很多具有关键的依赖关系,所以我不能只是清除并重新安装它们。
解决方案:像这样在一个怪物表情中将它们全部
sudo apt install lib32gcc1=1:9.2.1-9ubuntu2 lib32stdc++6=9.2.1-9ubuntu2 libasan5=9.2.1-9ubuntu2 libatomic1=9.2.1-9ubuntu2 libcc1-0=9.2.1-9ubuntu2 libgcc1=1:9.2.1-9ubuntu2 libgomp1=9.2.1-9ubuntu2 libitm1=9.2.1-9ubuntu2 liblsan0=9.2.1-9ubuntu2 libstdc++6=9.2.1-9ubuntu2 libtsan0=9.2.1-9ubuntu2 libubsan1=9.2.1-9ubuntu2 libquadmath0=9.2.1-9ubuntu2 ....
升级。在此之前,我不得不使用
dpkg -r ...
删除此依赖链中涉及的包,但根本无法通过 repos 获得。(这涉及逐步遍历它们的依赖链。)我曾经apt-cache policy
检查可用性。