是否可以在UNIX上运行COFF可执行文件,或者在Windows上运行ELF可执行文件?要在Windows和UNIX上运行任何一种文件类型,需要执行哪些步骤。我只是好奇。
发布于 2009-12-16 01:16:25
要真正运行可执行文件并让它们做有用的事情,您需要担心API,而不仅仅是可执行文件的格式。在安装了WINE的Linux机器上,您可以从命令行运行Windows .EXE文件,它们可以执行与Windows相同的操作。
但是,如果您在Windows计算机上安装CYGWIN,然后使用CYGWIN编译器从源代码重新构建应用程序,您将获得一个在Windows上运行的可执行文件,并执行与Linux上的Linux可执行文件相同的操作。许多标准的Linux工具已经被移植到CYGWIN存储库中,包括X-Windows和GIMP。
发布于 2016-08-03 10:17:37
要正确回答您的问题,有必要回顾一下ELF、COFF和PE是什么。这些二进制格式本质上只是一些容器,它们指示操作系统如何执行文件中包含的原始CPU指令。它们非常像MKV、WMV和OGG这样的音频/视频容器。操作系统是否支持可执行文件格式。直到最近,Microsoft Windows一直没有提供对COFF或ELF的任何支持。在Windows 10中,Microsoft通过内置Windows内核UserMode-Linux兼容的系统例程为ELF提供了间接支持。ELF内核运行在UserMode内核之上,运行所有ELF二进制格式,就好像它独立于MS Windows运行一样。
使用UserMode-Linux (子内核)的替代方案是让Microsoft以完全兼容的格式重写大部分Linux API,他们的选择解决了另一个兼容性问题: API。"A“代表应用程序,"I”代表接口,然而作为接口的API主要只是一组可执行的例程和环境假设。对文件系统和大多数基本系统例程的访问是由Windows内核提供的,而其他一切都是由UserMode Linux内核提供的。这样,Windows不仅可以运行ELF格式的可执行文件,而且还可以运行已经在Linux API上运行的最流行的ELF可执行文件。
反过来,也就是问题的另一半,在Linux上运行PE (大多数Microsoft Windows可执行文件)也是可能的。有两个运行时包装库,可以运行MSIL (虚拟机应用程序)和Win32 (普通CPU应用程序)。因为Linux内核是可扩展的,可以识别特定的字节格式,然后运行适当的包装器程序,因此内核实际上支持PE和可能更多的可执行容器格式。因此,Linux可以在mono运行时(.NET/C#应用程序)或WINE运行时(Win32 C/C++)中运行一些PE程序。
要安装UserMode-Linux环境,您可以按照Microsoft's Development Network上提供的说明进行操作。总结一下:
启动“Bash on Ubuntu on Windows
请注意,此方法仅适用于Windows10,并且仍然限于文本模式控制台和Xorg的Win32端口,如vcXsrv。Cygwin或MSYS2系统不能运行ELF二进制文件,但可以移植和运行与Linux系统上的ELF二进制文件相同的应用程序。
发布于 2011-04-15 16:54:29
http://lbw.sourceforge.net/比line工作得更好。low是另一个做同样事情的项目,但那是工作较少的项目。
编辑:http://atratus.org/似乎也做了同样的事情,不需要有Interix/SFU。
https://stackoverflow.com/questions/1892677
复制相似问题