为什么 Windows EXE 文件不能在 Linux 上运行?

为什么 Windows EXE 文件不能在 Linux 上运行?

Windows 运行可执行文件的方式与 Linux 运行可执行文件的方式有何不同?为什么它们必须不同?此外,为什么 Linux 可执行文件没有文件扩展名?


我是不是询问如何使 EXE 文件在 Linux 上运行。

我问的是为什么这是行不通的。

答案1

Linux 和 Windows 可执行文件使用不同的格式。Linux 使用极低频在大多数架构上,Windows 使用聚乙烯格式。ELF 更适合 Linux 管理共享库的方式,而 PE 更适合 Windows 管理共享库的方式,但 Linux 无法执行 PE 可执行文件或 Windows ELF 可执行文件,这并没有根本原因。事实上,Linux执行 PE 可执行文件,通过葡萄酒

困难在于 Windows 和 Linux 具有完全不同的蜜蜂:它们具有不同的内核接口和库集。因此,要真正运行 Windows 应用程序,Linux 需要模拟该应用程序发出的所有 API 调用。这需要做很多工作。Wine 在某种程度上可以做到这一点,但这非常困难,尤其是因为 Windows 制造商不合作。您可以将其与母语是中文时学习英语进行比较:可执行格式是字母表(掌握起来并不难),API 是词汇表(需要花费数年时间才能达到可以开始阅读文学作品的水平)。

答案2

Windows 二进制文件有不同的澳大利亚商业信息局并使用不同的API比 Linux 二进制文件更慢。

Linux 二进制文件不需要扩展名,因为 *nix 使用权限位来识别可执行文件而不是扩展名。

答案3

这是我听到程序员用通俗易懂的语言解释 Windows 方面的内容。

在 Windows 中,EXE 文件调用的程序和操作系统中存在钩子,而在 Linux 中则不存在。这是因为两种环境存在差异。最初,Linux 会查找权限,而 Windows 会先检查扩展名、查看属性,然后查看 EXE 文件内部等,以查找可链接格式。

有一些应用程序,比如 Netbackup,最初是在 Linux 上运行的,后来被修改为在 Windows 环境中运行,而无需使用葡萄酒. 在我看来,这些往往是一些最稳定、性能最好的 Windows 应用程序。

当 Windows 应用程序变得难以控制时,通常是因为应用程序持有的一些钩子没有完全释放,而 Windows 认为它​​们已经释放了(内存泄漏)。当 Windows 将未释放的内存空间交给另一个应用程序时,它崩溃和烧伤。

相关内容