循环依赖阻碍了升级

循环依赖阻碍了升级

我有一个依赖循环,我无法弄清楚如何解决,它阻止我升级。

我目前使用的是 14.04,想升级到 16.04。下面是我一直在尝试但未成功的方法。在操作过程中的任何时候,如果我执行 apt-get -f install,那么整个混乱局面就会回到问题的开始。

但首先,让我快捷地回答具体问题,然后如果你想知道问题的原因和方式,请参见下文。

问题:如何将软件包 gcc-4.8-base 从版本 14.04.3 移至 14.04.1?仅提供所需版本是不够的,旧软件包不存在于我的机器上,而且我不知道在哪里以及如何获取该旧软件包。

这就是我需要回答上述问题的原因,如果您发现了该问题的不同解决方案,我愿意洗耳恭听(注视着它):

sudo apt-get update

这很好用。然后升级:

sudo apt-get upgrade

失败原因:

The following packages have unmet dependencies:
 libstdc++-4.8-dev : Depends: libstdc++6 (>= 4.8.4-2ubuntu1~14.04.3) but 4.8.4-2ubuntu1~14.04.1 is installed
 libstdc++6 : Depends: gcc-4.8-base (= 4.8.4-2ubuntu1~14.04.1) but 4.8.4-2ubuntu1~14.04.3 is installed
E: Unmet dependencies. Try using -f.

因此按照建议尝试使用 -f 选项:

sudo apt-get upgrade -f

经过几分钟的获取后最终失败:

Preparing to unpack .../libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb ...
Unpacking libstdc++6:i386 (4.8.4-2ubuntu1~14.04.3) over (4.8.4-2ubuntu1~14.04.1) ...
dpkg: error processing archive /var/cache/apt/archives/libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb (--unpack):
 trying to overwrite '/usr/share/gcc-4.8/python/libstdcxx/__init__.py', which is also in package libstdc++6-armhf-cross 4.8.4-2ubuntu1~14.04.1cross0.11.1
Errors were encountered while processing:
 /var/cache/apt/archives/libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

我现在的想法是摆脱 libstdc++6-armhf-cross,我目前不需要进行任何交叉编译,并且将来如果需要,我会考虑将其重新引入:

sudo apt-get remove --purge libstdc++6-armhf-cross libstdc++-4.8-dev-armhf-cross g++-4.8-arm-linux-gnueabihf libsfstdc++-4.8-dev-armhf-cross g++-4.8-multilib-arm-linux-gnueabihf libstdc++-4.8-dev g++-4.8 g++-arm-linux-gnueabihf g++ build-essential

运行正常,因此回到升级:

sudo apt-get upgrade

嗯,它仍然失败,只是这次是在不同的包上:

The following packages have unmet dependencies:
 libstdc++-4.8-dev : Depends: libstdc++6 (>= 4.8.4-2ubuntu1~14.04.3) but 4.8.4-2ubuntu1~14.04.1 is installed
 libstdc++6 : Depends: gcc-4.8-base (= 4.8.4-2ubuntu1~14.04.1) but 4.8.4-2ubuntu1~14.04.3 is installed
E: Unmet dependencies. Try using -f.

并使用 -f 选项:

sudo apt-get upgrade -f

再次失败:

Preparing to unpack .../libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb ...
Unpacking libstdc++6:i386 (4.8.4-2ubuntu1~14.04.3) over (4.8.4-2ubuntu1~14.04.1) ...
dpkg: error processing archive /var/cache/apt/archives/libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb (--unpack):
 trying to overwrite '/usr/share/gcc-4.8/python/libstdcxx/__init__.py', which is also in package libstdc++6-armhf-cross 4.8.4-2ubuntu1~14.04.1cross0.11.1
Errors were encountered while processing:
 /var/cache/apt/archives/libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

那么,要摆脱 gcc-4.8-base 吗?不,这不会发生,它是 libstdc++6 的依赖项,因此是循环依赖项。我能想到的唯一解决方案是尝试将 gcc-4.8-base 移回版本 14.03.1,然后从那里升级,因此出现了上面的原始问题。

根据 Scott 的建议,我也开始尝试他的序列,但第一个命令就失败了:

sudo dpkg --configure -a

失败原因:

dpkg: dependency problems prevent configuration of libstdc++-4.8-dev:i386:
 libstdc++-4.8-dev:i386 depends on libstdc++6 (>= 4.8.4-2ubuntu1~14.04.3); however:
  Version of libstdc++6:i386 on system is 4.8.4-2ubuntu1~14.04.1.

dpkg: error processing package libstdc++-4.8-dev:i386 (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of g++-4.8:
 g++-4.8 depends on libstdc++-4.8-dev (= 4.8.4-2ubuntu1~14.04.3); however:
  Package libstdc++-4.8-dev:i386 is not configured yet.

dpkg: error processing package g++-4.8 (--configure):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 libstdc++-4.8-dev:i386
 g++-4.8

答案1

注意,在您的最新更新中提到了 i386...为了简化您的挑战,首先删除您的多架构...删除所有 32 位软件包

sudo apt-get remove --purge `dpkg --get-selections | grep i386 | awk '{print $1}'`

然后是多架构本身

sudo dpkg --remove-architecture i386

然后发出

sudo dpkg --configure -a
sudo apt-get -f install
sudo apt-get --fix-missing install
sudo dpkg --configure --pending
sudo dpkg -C  # audit -

相关内容