gcc-multilib 在 Ubuntu 上到底是什么意思?

gcc-multilib 在 Ubuntu 上到底是什么意思?

在使用旧版 Ubuntu(v.12)很长时间后,我将其更新到 v.16,但对“gcc-multilib”的提及感到非常困惑。

这实际上是苹果的“胖二进制文件”还是“通用二进制“模型移植到Linux?

也就是说,Ubuntu 上的原生 C 库是否已经成为了为各种架构打包多个二进制文件的容器?

如果是这样,我们不再需要在 x64 系统上专门安装 32 位运行时库?gcc 或 g++ 库的“默认”包包含运行和构建 32 位应用程序所需的一切?

答案1

gcc-multilib适用于交叉编译,即编译一个程序以在不同处理器架构上运行。例如,gcc-multilib如果您在 64 位 Ubuntu 上运行,并且想要编译一个程序以在 32 位 Ubuntu 上运行(或在 ARM 等上运行,您明白了)。

答案2

这实际上是 Apple 的“胖二进制文件”或“通用二进制文件”模型移植到 Linux 吗?

不。

Multilib 是一种支持在给定系统上为同一 CPU 系列构建和运行不同 ABI 代码的机制。它最常见的用途是支持 64 位系统上的 32 位代码和 64 位内核的 32 位系统上的 64 位代码。它还曾用于在硬浮点 arm 系统上为软浮点 arm 二进制文件提供支持。

它已经存在了长的时间。至少从 Debian lenny 开始,但它从未在打包工具中得到过特定支持,这使得库支持很尴尬。此外,在 arm 上游将 64 位和 32 位架构视为完全独立的架构,而不是同一架构的变体,因此您不能在那里使用 multilib。

在 Debian 和 Ubuntu 系统上运行代码方面,multilib 已经大多由 multiarch 取代,这是一种更通用的机制,允许在同一系统上安装来自任何架构组合的软件包(尽管实际运行这些二进制文件可能需要安装模拟层)。

在构建代码方面,Debian/Ubuntu 现在提供适当的交叉编译器包,它们比 multilib 更灵活,因为它们原则上允许您在任何事物上构建任何东西(尽管实际上 Debian 并不提供全套组合)。

所以我认为 multilib 目前基本上是遗留的,但它仍然存在,因为重要的包仍然需要它来构建。

相关内容