Solaris(64 位)开发者指南

附录 B 常见问题解答 (Frequently Asked Question, FAQ)

如何确定系统运行的是 32 位还是 64 位版本的操作系统?

可以使用 isainfo -v 命令来确定操作系统运行的应用程序。该命令会显示一组操作系统支持的应用程序。有关更多信息,请参见 isainfo(1) 手册页。

是否可以在 32 位硬件上运行 64 位版本的操作系统?

不可以。不能在 32 位硬件上运行 64 位操作系统。64 位操作系统要求使用 64 位 MMU(内存管理单元)和 CPU 硬件。

如果要在装有 32 位操作系统的系统上运行 32 位应用程序,是否需要对该应用程序进行更改?

不需要。如果应用程序仅在 32 位操作系统上执行,则不需要对其进行任何更改或重新编译。

如果要在装有 64 位操作系统的系统上运行 32 位应用程序,是否需要对该应用程序进行更改?

大多数应用程序都可以保留为 32 位,并且仍可以在运行 64 位操作系统的系统上执行,而无需对代码进行任何更改或重新编译。对于不需要 64 位功能的 32 位应用程序可以保留为 32 位,以便最大程度地提高可移植性。

如果应用程序使用 libkvm(3LIB),则必须将其重新编译为 64 位 才可以在运行 64 位操作系统的系统上执行。如果应用程序使用 /proc,则可能需要将其重新编译为 64 位,否则它无法识别 64 位进程。这是因为描述该进程的现有接口和数据结构不够大,无法包含所涉及的 64 位值。

如果要实现 64 位功能,需要调用什么程序?

没有专门用来调用 64 位功能的程序。要在运行 64 位版本操作系统的系统上利用 64 位功能,需要重新生成应用程序。

是否可以在运行 64 位操作系统的系统上生成 32 位应用程序?

可以。本机编译和交叉编译模式均受支持。无论系统运行的是 32 位版本的操作系统还是 64 位版本的操作系统,缺省编译模式均为 32 位。

是否可以在运行 32 位操作系统的系统上生成 64 位应用程序?

可以,但前提是安装了系统头文件和 64 位库。但是,不能在运行 32 位操作系统的系统上运行 64 位应用程序。

生成和链接应用程序时,是否可以结合使用 32 位库和 64 位库?

不可以。32 位应用程序必须与 32 位库链接,64 位应用程序必须与 64 位库链接。如果尝试使用错误的库版本执行生成和链接操作,则会产生错误。

64 位实现中浮点数据类型的长度是多少?

仅有 longpointer 类型发生了变化。请参见表 4–1

time_t 有何变化?

time_t 类型仍然是类型为 long 的值。在 64 位环境中,此类型会增大到 64 位。因此,64 位应用程序将不会出现 2038 年问题。

在运行 64 位 Solaris 操作环境的计算机上,uname(1) 的值是多少?

uname -p 命令的输出没有变化。

是否可以创建 64 位 XView 或 OLIT 应用程序?

不可以。这些库对于 32 位环境已经过时,并且不会在 64 位环境中继续使用。

为什么 /usr/bin/sparcv9/ls 中存在 64 位版本的 ls

在常规操作中,无需使用 64 位版本的 ls。但是,由于在 /tmp/proc 中可能会创建过大的文件系统对象而导致 32 位 ls 无法识别,因此,64 位版本的 ls 允许用户对这些对象进行检查。