如果 macOS 和 Linux 之间存在二进制不兼容,那么遵守 POSIX 有何意义?

Noo*_*Guy -1 linux posix macos

POSIX的开发是为了让我们能够与 Unix 变体实现软件兼容性(可移植性):

可移植操作系统接口 (POSIX) 是 IEEE 计算机协会指定的一系列标准,用于维护操作系统之间的兼容性。1 POSIX 定义了系统级和用户级应用程序编程接口 (API),以及命令行 shell 和实用程序接口,以实现软件与 Unix 和其他操作系统变体的兼容性(可移植性)。1 POSIX 也是 IEEE 的商标。1 POSIX 旨在供应用程序和系统开发人员使用。2

macOS 和 Linux 均符合 POSIX 标准。所以按理说,为 macOS 编写的应用程序应该在 Linux 上运行。

但根据这个问题,macOS和Linux之间存在二进制不兼容。根据所选的最佳答案,这是因为您需要链接适当的库,但遭到评论者的反对,称真正的问题是不兼容的系统调用。

那么如果 macOS 和 Linux 之间存在二进制不兼容,那么遵守 POSIX 有何意义呢?这使得 POSIX 毫无用处,不是吗?

Ste*_*itt 5

关键在于您引用的这部分:

\n
\n

POSIX 定义了系统级和用户级应用程序编程接口 (API)

\n
\n

应用程序编程接口定义了在对应用程序进行编程时可以依赖哪些接口。这意味着您可以按照 POSIX 编写程序,并且您将能够在任何兼容 POSIX 的系统上构建它(如果您\xe2\x80\x99ve 仅使用 POSIX 功能)。

\n

POSIX 不关心应用程序二进制接口,这才是运行给定二进制文件时最重要的。

\n

因此,您可以将源代码转换为仅使用 POSIX API 的程序,并在 macOS 和兼容 POSIX 的 Linux 系统上构建它,并运行生成的二进制文件。你可以\xe2\x80\x99t 获取 macOS 二进制文件并在 Linux 上运行它,至少不需要一些翻译程序(例如 Windows 程序的 Wine)。

\n

最重要的是,许多程序使用的不仅仅是 POSIX API,因此您\xe2\x80\x99d 必须确保它们所需的其他所有内容也在目标系统上可用(这就是库的用武之地)。

\n