我有一个依赖循环,我无法弄清楚如何解决,它阻止我升级。
我目前使用的是 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 -