我阅读了 SO 问题,但我仍然有疑问 -为什么特定 CPU 的可执行程序在 Linux 和 Windows 上不起作用?
其中一个回复说:“每个操作系统都要求二进制文件符合特定的二进制格式。”
那是对的吗 ?如果是,那么我们可以将其添加到上述语句中吗 - 可执行文件包含二进制代码 (???)。假设 100011 表示 Windows 二进制格式的 5。但是这些相同的代码在另一个操作系统中意味着其他甚至什么都没有。因此,为 win 制作的可执行文件将无法在 linux 中运行。
我阅读了 SO 问题,但我仍然有疑问 -为什么特定 CPU 的可执行程序在 Linux 和 Windows 上不起作用?
其中一个回复说:“每个操作系统都要求二进制文件符合特定的二进制格式。”
那是对的吗 ?如果是,那么我们可以将其添加到上述语句中吗 - 可执行文件包含二进制代码 (???)。假设 100011 表示 Windows 二进制格式的 5。但是这些相同的代码在另一个操作系统中意味着其他甚至什么都没有。因此,为 win 制作的可执行文件将无法在 linux 中运行。
Windows 和 Linux 是使用不同的基础构建的。Windows 是基于 DOS 的,Linux 是基于 UNIX 的。如果 Windows 已经发布了他们操作系统的源代码,那么 Linux 可能会更兼容并能够运行 Windows 程序,但这并没有发生。Linux 是自行开发的,因此可以理解它会有所不同。除此之外,Linux 还使用不同的系统命令和调用,因此即使它们都有“可执行程序”,它们的执行方式也是特定于操作系统的。
一个示例:在 Windows 中打开命令提示符并键入dir
. 这将列出当前目录的所有文件和子目录。但是,Linux 等价于列出目录的内容是ls
.
回答我自己的问题的粗鲁,简单的英语尝试-
操作系统允许应用程序/程序与硬件交互——显示器、键盘、网卡等。它就像应用程序和硬件之间的中间人。
为什么我们首先需要一个中间人?我不知道答案,但我会猜。也许我们可以向我们的应用程序添加代码,使其能够与所有硬件进行交互。但是,如果每个应用程序都这样做,那么每个应用程序将需要太多空间 - 浪费。他们将是冗余的。例如,所有游戏都会有自己的代码在不同品牌的显示器上显示游戏画面。也许还会有其他问题。
要与硬件交互,程序需要与操作系统“对话”或进行“系统调用”。操作系统使用的“语言”称为“API”。每个操作系统都有一个独特的 API。因此,Windows API 中“对话”的程序将无法与 linux 系统“对话”。
我使用的链接 - http://en.wikipedia.org/wiki/Operating_system http://en.wikipedia.org/wiki/System_call