为什么Windows exe无法在Linux上运行?


29

不是在如何使Windows exe在Linux中工作。

我问为什么它不起作用。

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


Answers:


45

Linux和Windows可执行文件使用不同的格式。Linux 在大多数体系结构上使用ELF格式,而Windows使用PE格式。ELF更适合Linux管理共享库的方式,PE更适合Windows管理共享库的方式,但是Linux不能执行PE可执行文件或Windows ELF可执行文件没有根本原因。实际上,Linux 可以通过Wine 执行PE可执行文件。

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


9
“词汇”是一个很好的类比。
暂停,直到另行通知。

我认为你的意思完全不同
Mircea Chirea 2010年

如果Android bnaries是基于Linux的,则Android也支持Linux bnaries(而非软件包),因为它们基于Linux
Suici Doga

@SuiciDoga之类的,但是要复杂得多。Android内核可以运行Linux二进制文件(如果它们是为正确的内核ABI编译的,例如使用NEON寄存器),但是如果要运行动态链接的程序,则还必须安装所有库。(如果这样做,您也可以安装一个程序包管理器,因此“二进制文件而不是程序包”并不是真的。)
Gilles'SO-别邪恶了

是的,我知道您必须更改图书馆路径,等等
Suici Doga

14

Windows二进制文件与Linux二进制文件具有不同的ABI并使用不同的API

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


1
同意答案...可能相关的其他数据:ELF(en.wikipedia.org/wiki/Executable_and_Linkable_Format)vs PE(en.wikipedia.org/wiki/PE_executable
RobotHumans

是的,它也需要一个不同的加载器。en.wikipedia.org/wiki/Loader_%28computing%29
Ignacio Vazquez-Abrams 2010年

我特别喜欢@Gilles答案中缺少的第二条信息。
蒂莫西·古

@ IgnacioVazquez-Abrams这很有趣。如果我告诉你我只是在Ubuntu 16.04 Linux上本地运行Windows游戏PlantsVsZombies.exe,该怎么办?我只是无聊地做了,知道它不会启动,但是确实可以,我可以很好地播放它。这似乎是不可能的,因为该游戏需要先运行Steam api,而显然不需要。它是如何发射的?我应该为此提出一个新问题吗?
Nikos,

@ RestlessC0bra:葡萄酒和Mono是东西。
伊格纳西奥·巴斯克斯

0

这就是我从程序员那里听到Windows方面用外行术语解释的方式。

在Windows中,程序中有钩子,而Exe对其进行调用的OS在Linux中是不会存在的。由于两种环境的差异。最初,Linux会寻找权限,Windows会首先通过检查扩展名,查看属性然后在Exe文件内部等来寻找可链接格式。

Netbackup之类的应用程序始于linux,经过修改后可以在Windows环境中运行,而无需使用Wine IMHO,这些应用程序通常是Windows应用程序中表现最稳定的一种。

当Windows Apps。通常变得不规则,这是因为该应用程序持有的某些挂钩没有完全释放,并且Windows认为它们是(内存泄漏)。Windows将未释放的内存空间移交给另一个应用程序时会崩溃并刻录。


2
我想以某种方式相信比尔·盖茨(Bill Gates)回答了我的问题;-)
2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.