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