20 64 位系统环境中的 32 位和 64 位应用程序 #
SUSE® Linux Enterprise Server 可用于多种 64 位平台。开发商尚未将所有 32 位应用程序移植到 64 位系统。本章简要概述了如何在 64 位 SUSE Linux Enterprise Server 平台上实现 32 位支持。
用于 64 位平台 POWER、IBM Z 和 AMD64/Intel 64 的 SUSE Linux Enterprise Server 可让现有的 32 位应用程序“无需额外配置” 即可在 64 位环境中运行。对应的 32 位平台为:用于 POWER 的 POWER 和用于 x86 的 AMD64/Intel 64。这种支持意味着您可以继续使用首选的 32 位应用程序,而无需等待对应的 64 位端口可用。当前的 POWER 系统以 32 位模式运行大多数应用程序,但您可以运行 64 位应用程序。
SUSE Linux Enterprise Server 不支持编译 32 位应用程序。它只为 32 位二进制文件提供运行时支持。
20.1 运行时支持 #
如果某个应用程序同时适用于 32 位和 64 位环境,安装这两个版本可能会导致出现问题。在这种情况下,请决定要安装哪一个版本,以避免潜在的运行时错误。
此规则的一个例外是 PAM(可插入身份验证模块)。SUSE Linux Enterprise Server 在身份验证过程中使用 PAM 作为在用户和应用程序之间充当媒介的层。在同时运行了 32 位应用程序的 64 位操作系统上,请始终安装 32 位和 64 位 PAM 版本。
每个应用程序都需要一系列的库才能正常执行。由于这些库的 32 位和 64 位版本的名称相同,因此必须以另一种方式将它们彼此区分开来。
为了与 32 位版本保持兼容,64 位和 32 位库将存储在同一位置。在 32 位和 64 位环境中,libc.so.6
的 32 位版本都位于 /lib/libc.so.6
下。
所有 64 位库和对象文件都位于名为 lib64
的目录中。以往通常位于 /lib
和 /usr/lib
下的 64 位对象文件现在位于 /lib64
和 /usr/lib64
下。这意味着 /lib
和 /usr/lib
下有可用于存储 32 位库的空间,因此两个版本的文件名都可以保持不变。
如果 /lib
下的 32 位子目录的数据内容与字词大小无关,则不会移动这些子目录。此方案符合 LSB(Linux 标准库)和 FHS(文件系统层次标准)的要求。
20.2 内核规范 #
AMD64/Intel 64、POWER 和 IBM Z 适用的 64 位内核提供 64 位和 32 位两种内核 ABI(应用程序二进制接口)。后者与对应的 32 位内核的 ABI 相同。这意味着,32 位和 64 位应用程序与 64 位内核的通讯方式是相同的。
针对 64 位内核的 32 位系统调用仿真不支持系统程序使用的某些 API。这取决于平台。出于此原因,少数应用程序(例如 lspci
)必须在非 POWER 平台上编译为 64 位程序才能正常运行。在 IBM Z 上,并非所有 ioctl 都可在 32 位内核 ABI 中使用。
64 位内核只能加载 64 位内核模块。必须专门为 64 位内核编译 64 位模块。无法将 32 位内核模块与 64 位内核搭配使用。
某些应用程序需要单独的内核可加载模块。如果您想要在 64 位系统环境中使用 32 位应用程序,请与应用程序供应商和 SUSE 联系。确保 64 位版本的内核可加载模块以及 32 位编译版本的内核 API 适用于此模块。