对于已安装的(虚拟)包,apt 报告依赖项“不可安装”

对于已安装的(虚拟)包,apt 报告依赖项“不可安装”

我正在尝试在系统armel上安装库和 gcc 支持armhf。我已经安装了libc6-dev:armel以获取armel库和标头,现在我认为我需要安装gcc-multilib才能让 gcc 使用它们(当-mfloat-abi=softfp指定时)。但是,软件包安装失败:

$ sudo apt-get install gcc-4.6-multilib
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 gcc-4.6-multilib : Depends: libsfgcc1 (>= 1:4.6.3-1ubuntu5) but it is not going to be installed or
                             libgcc1-armel but it is not installable
E: Unable to correct problems, you have held broken packages.

libgcc1-armel是我已经安装的包提供的虚拟包:

$ dpkg -s libgcc1:armel | egrep 'Version|Provides'
Version: 1:4.6.3-1ubuntu5
Provides: libgcc1-armel

为什么这个包已经安装但 apt 认为不可卸载?


注意:我已尝试使用 precise 的 apt/dpkg(armel在中指定为外部架构/etc/dpkg/dpkg.cfg.d/architectures)和 quantal 的 apt/dpkg(似乎具有更成熟的多架构支持,例如dpkg --add-architecture)。

注 2:使用libsfgcc1而不是libgcc1:armel允许安装此库,但会阻止安装其他多架构库,例如libssl1.0.0:armel,这只需要libgcc1:armel。我猜这libsfgcc1是一个在真正的多架构支持之前引入的过渡库。

答案1

Apt 的错误可能相当难以理解。

这里的问题是,您安装了第一个选项,但我们实际上想要安装第二个选项并卸载第一个选项。

给出提示,apt-get install gcc-4.6-multilib libsfgcc1对我来说就成功了。

答案2

(根据我对 Debian 的 Multiarch 规范的理解,这只是一个猜测:)

在这种情况下,如果libgcc1-armel是 *:armel 包的“提供”,那么它也许被认为是像libgcc1-armel:armel,不是吗?

而像 这样的外部架构包libgcc1-armel:armel无法满足本地架构包的要求(libgcc1-armel就像libgcc1-armel:armhf),除非它被标记为“Multi-Arch: foreign”或“Multi-Arch: allowed”,并且依赖关系将指定为“:armel”。但对于虚拟包如何实现这一点尚不清楚...

相关内容