【问题标题】:why windows application does not work in linux or mac?为什么 windows 应用程序不能在 linux 或 mac 中运行?
【发布时间】:2012-11-29 05:04:11
【问题描述】:

我阅读了 SO 问题,但我仍有疑问 - Why an executable program for a specific CPU does not work on Linux and Windows?

其中一个回复说“每个操作系统都要求二进制文件符合特定的二进制格式”。

正确吗?如果是,那么我们可以将其添加到上述语句中 - 可执行文件包含二进制代码 (???)。假设 100011 表示 Windows 二进制格式的 5。但是这些相同的代码在另一个操作系统中意味着其他甚至什么都没有。因此,为 win 制作的可执行文件将无法在 linux 中运行。

【问题讨论】:

  • 嘿!为什么投反对票?如果您认为这是一个愚蠢的问题,请回答并启发我。

标签: computer-science


【解决方案1】:

Windows 和 Linux 是使用不同的基础构建的。 Windows 是基于 DOS 的,Linux 是基于 UNIX 的。如果 Windows 已经发布了他们的操作系统的源代码,那么 Linux 可能会更兼容并能够运行 Windows 程序,但这并没有发生。 Linux 是自行开发的,因此可以理解它会有所不同。除此之外,Linux 还使用不同的系统命令和调用,因此即使它们都有“可执行程序”,它们的执行方式也因操作系统而异。

一个示例:在 Windows 中打开命令提示符并键入 dir。这将列出当前目录的所有文件和子目录。但是,Linux 等价于列出目录的内容是ls

来源:Why can't linux run windows programs?

【讨论】:

    【解决方案2】:

    回答我自己问题的粗略、简单的英语尝试 -

    操作系统允许应用程序/程序与硬件交互 - 显示器、键盘、网卡等。它充当应用程序和硬件之间的中间人。

    为什么我们首先需要一个中间人?我不知道答案,但我会猜。也许我们可以向我们的应用程序添加代码,使其能够与所有硬件进行交互。但是,如果每个应用程序都这样做,那么每个应用程序将需要太多空间 - 浪费。他们将是冗余的。例如,所有游戏都会有自己的代码在不同品牌的显示器上显示游戏画面。也许还会有其他问题。

    要与硬件交互,程序需要与操作系统“对话”或进行“系统调用”。操作系统使用的“语言”称为“API”。每个操作系统都有一个独特的 API。因此,在 windows API 中“对话”的程序将无法与 linux 系统“对话”。

    我使用的链接 - http://en.wikipedia.org/wiki/Operating_system http://en.wikipedia.org/wiki/System_call

    【讨论】:

    • 如果有人有 CS 知识和/或其中的学位,请改进或更正此答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2021-09-19
    • 1970-01-01
    • 2019-02-23
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多