libc6:i386和libc6-i386有什么区别?

10

我正在使用Ubuntu 14.04.2 LTS \n \l

这是我安装的libc

$ dpkg --list | grep libc6
ii  libc6:amd64                                           2.19-0ubuntu6.7                                     amd64        Embedded GNU C Library: Shared libraries
ii  libc6-dbg:amd64                                       2.19-0ubuntu6.7                                     amd64        Embedded GNU C Library: detached debugging symbols
ii  libc6-dev:amd64                                       2.19-0ubuntu6.7                                     amd64        Embedded GNU C Library: Development Libraries and Header Files
ii  libc6-i386                                            2.19-0ubuntu6.7                                     amd64        Embedded GNU C Library: 32-bit shared libraries for AMD64
rc  libc6-x32                                             2.19-0ubuntu6.7                                     amd64        Embedded GNU C Library: X32 ABI Shared libraries for AMD64

但是,当我执行$ sudo apt-get install libdbus-1-3:i386时,出现以下错误。

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:
 libdbus-1-3:i386 : Depends: libc6:i386 (>= 2.10) but it is not going to be installed
 unity-control-center : Depends: libcheese-gtk23 (>= 3.4.0) but it is not going to be installed
                        Depends: libcheese7 (>= 3.0.1) but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

我想知道libc6:i386和libc6-i386之间的区别是什么?


在这里添加一条注释以跟踪此内容...天啊!好知道它们不是“苹果”到“苹果”。 - kayleeFrye_onDeck
似乎这个问题已经在一年前被提出了(http://stackoverflow.com/questions/30489914/whats-the-difference-between-libc6-i386-and-libc6i386),但没有得到回答。很有趣看到它再次出现。如果你得到了一个好的答案,那么很可能那个问题将被标记为重复。 - cf-
1个回答

9

libc6:i386是针对i386架构内核/系统的i386版本的libc。这是为了运行为i386系统构建的软件包,如果您尝试在amd64系统上使用i386软件包,则需要此软件包。这被称为multiarch。

libc6-i386是面向amd64系统的32位开发包libc。这不是用于运行软件的,而是用于编译和链接32位代码。


我知道这是一个古老的问题,但是:你能解释一下有什么区别吗?当我在amd64上链接代码到i386libc6时,我不需要libc6-i386:amd64库,而需要libc6:i386库吗?libc6-i386是否包含真正的实现 - 看起来确实是这样。所以,理论上,我可以在没有libc6:i386的情况下在我的amd64机器上运行(理论上)已编译为i386的二进制文件吗?实际上有很多问题:D - Lapshin Dmitry
对我来说这不是正确的。在我的Debian系统上,libc6:amd64大多数文件位于(/usr)/lib/x86_64-linux-gnu中。libc-amd64大多数文件位于(/usr)/lib64中。文件非常相似:gconv / UTF-32.so,libdl.so.2,libnss_compat-2.28.so,ld-2.28.so等。没有开发标头。与dhex的比较表明,尽管存在一些调试符号ID,但某些文件似乎相等,其他文件在少数标志上有所不同,但具有完全相同的二进制布局和大小。 - u_Ltd.
你可以使用至少一个:i386 / -i386安装的程序来运行i386编译的二进制文件。但是不要问我如何告诉它们使用正确的ld.so。可能它们会自动找到。 - u_Ltd.
libc6-i386: 用于AMD64的32位共享库,适用于那些不想要执行dpkg --add-architecture i386的人。libc6-dev-i386: 用于AMD64的32位开发库。 - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接