Answers:
成功运行程序需要满足以下三个条件:
通过具有仿真器/解释器(对于其他CPU指令集),具有额外的文件加载器(对于外来文件格式)以及具有提供更多API的附加编程库,可以增加匹配所有这三种方法的机会。
另请注意,某些处理器可以在本机执行多个指令集。一台PC通常具有x86和amd64指令集;一个ARM处理器可以执行四个:ARM32 / Thumb / Java bytecode / ThumbEE。某些操作系统也可以原生提供多个API(Microsoft Windows提供Win32和POSIX)。
对于其他所有内容,您都需要额外的软件。为了运行Java程序,您需要上面列出的三个部分才能使其正常工作:运行字节码的Java虚拟机程序;启动Java程序的方式,以及供程序调用的Java类库。“ Java”在这里是Sun最初开发的几种独立技术的商标,但是对于用户来说,它们通常是作为一种下载的。
这同样适用于“净”,这是一种营销名优产品为几种不同的技术最初是由微软开发:在公共语言运行时/基类库(CLR)是API; VES是加载程序,公共语言接口(CLI)是指令集。
您不必从Microsoft,Sun或Intel那里下载这些技术,因为它们最初是发明了一些东西。AMD使处理器兼容英特尔的标准;Apache(“ Harmony”)和Google(“ Android Dalvik”)都创建了类似Java的套件;Mono提供了CLR / CLI / VES套件。重要的是每个人都使用相同的标准,从而使它们兼容。DVD光盘将在符合标准的任何DVD播放器上播放,并且HTML网页将在任何符合HTML标准的Web浏览器中呈现。
因此,Mono使CLR .exe应用程序运行,而Wine使Win32 .exe应用程序运行。唯一的共同点是文件名以“ .exe”结尾;内容完全不同且不兼容,因此您需要正确的内容。
就像Python解释器在与Perl一起出现时会出错(反之亦然)一样,CLR解释器在与x86 + Win32或JVM + Java字节码一起出现时也会出错。如果您可以发布指向您要运行的特定程序的链接,则本人或其他人应该可以告诉您确切的指令集,文件格式和设计的API,以及在Linux上需要安装的内容。运行它。希望有帮助!
(有时甚至可能同时需要两者。例如,Openbve火车模拟器是C#,并已编译为PE / COFF + CLI + CLR,但可以选择使用为PE / COFF + Win32 + x86编译的C二进制插件。在这种情况下,您可以需要Wine下的Mono的Win32版本。如果CPU架构也相同,则需要进行仿真;因此Qemu下Wine下的Mono)。
简短的答案:
.NET是Microsoft对Java的回答,而Mono是Java的开源实现。Wine是用于本机exe的,与Mono没有任何关系,除了您可以像其他所有本机Windows软件一样使用它运行.NET运行时。
长答案:
要了解Wine与Mono(和.NET)之间的区别,您必须了解本机代码可执行文件与“公共语言运行时”(也称为“虚拟机”可执行文件)之间的区别:
本机代码可执行文件使用特定于您的处理器的指令代码,并由其直接执行。这意味着必须为不同的处理器重新编译它们。Wine可以通过直接运行此可执行代码并捕获其进行的任何库调用,然后将它们重定向到自己的Win32 API实现,来运行Windows的本机代码可执行文件。
“ CLR”或“ VM”可执行文件不是特定于一个处理器的:它们需要额外的软件才能使处理器运行它们。Mono / .NET就是这种系统的一个例子。.NET程序即使在Windows上运行也需要安装.NET运行时。Java的工作方式相同。
所以:
1)Wine和Mono之间的区别:Wine用于运行Windows编写的本机代码可执行文件,而Mono用于运行不一定为任何特定平台制作的Mono / .NET可执行文件。在Linux上安装Mono等效于在Windows上安装.NET运行时。
2)如果要运行的程序根本不使用.NET,则必须使用Wine。Mono在这里完全不会帮助您。
但是,如果程序确实使用.NET,则有两个选项,其中两个选项可能会起作用,也可能不会起作用:
您可以尝试使用Mono运行它。如果.NET程序还使用win32 API中的本机函数,则很多(但不是全部)为Windows制作的.NET应用程序都将使用本机函数,这将失败。
或者,您可以在Wine中为Windows安装Microsoft .NET运行时,然后通过它运行.NET应用程序。在这种情况下,您将根本不会使用Mono。
3)Wine和Mono完全不依赖,但是如上所述,可以在Wine中使用Microsoft .NET运行时来运行Mono / .NET应用程序。
file *.exe
将显示有关CPU指令集和文件类型的信息。如果它是还使用本机Win32 API调用的CLI / CLR(“ .Net” / Mono)应用程序,则需要运行它,或查找file *.dll
显示为本机x86 + Win32的任何文件。