多库和多架构:这两个术语只是同义词吗?如果不是,它们有何不同?
如果我想在同一系统中运行 32 位和 64 位应用程序,那么我应该调用它吗多架构还是多库?
答案1
它们是解决同一一般问题的不同方法,但范围有所不同:运行为不同体系结构构建的二进制文件。
当您获得要运行的二进制文件时,您需要三件事:它需要的库(如果有的话,包括它的动态加载程序)、对其进行的系统调用的支持以及解释它包含的机器指令的能力。 Multilib 和 multiarch 解决了第一个问题。
Multilib 使用每个架构的已知变体表。这最初解决了 ABI 变体,例如在 MIPS 上,但现在它最常见的用途是 x86 上的 32 位支持:它通常定义lib32
为 32 位库目录(并且此定义是特定于 x86 的)。因此,multilib 设置可能会在 中提供 64 位加载程序/lib
,在/lib32
.在编译器方面,您指定-m32
使用 multilib 构建 32 位二进制文件。
多架构更通用:它的定义不依赖于主机架构。所有库都可以在lib
与其目标架构相对应的子目录中找到; /usr/lib/x86_64-linux-gnu/
、/usr/lib/i386-linux-gnu
等。在编译器方面,您可以使用适当的交叉编译器。
使用哪种方法来运行 32 位二进制文件取决于发行版。 Debian 及其衍生版本现在使用 multiarch,其他发行版使用 multilib。