据我所知,葡萄酒和Mono都用于在Ubuntu下运行Windows应用程序。
所以我想知道
谢谢和问候!
发布于 2011-03-21 02:34:19
成功地运行一个程序需要三样东西匹配:
您可以通过拥有模拟器/解释器(用于其他CPU指令集)、拥有额外的文件加载器(用于外国文件格式)以及拥有提供更多API的附加编程库来增加匹配这三者的机会。
还要注意的是,一些处理器本机可以执行多个指令集;PC通常有x86和amd64指令集;ARM处理器可以执行四个:ARM 32/拇指/Java字节码/ThumbEE。一些操作系统也可以本地提供多个API (Microsoft提供Win32和POSIX)。
对于其他一切,你需要额外的软件。要运行Java程序,您需要上面列出的三个部分来使其工作:运行字节码的Java虚拟机程序;启动Java程序的方法;以及用于调用程序的Java类库。"Java“是Sun最初开发的几种独立技术的名称,但对于用户来说,它们通常是作为一个整体下载的。
".Net“也是如此,它是微软最初开发的几种不同技术的营销品牌:公共语言运行时/基类库(CLR)是API;VES是加载器,公共语言接口(CLI)是指令集。
你不需要仅仅因为这些技术最初发明了一些东西就从微软、太阳或者英特尔下载这些技术。AMD使处理器与英特尔的标准兼容;Apache (“和谐”)和谷歌("Android“)都提供类似Java的套件;Mono提供CLR/CLI/VES套件。重要的是,每个人都使用相同的标准,使他们兼容。DVD光盘将在任何符合标准的DVD播放机上播放,HTML网页将在任何符合HTML标准的Web浏览器中呈现。
因此,Mono使CLR .exe应用程序运行,而Win32 .exe应用程序运行。唯一的共同点是文件名以“.exe”结尾;内容完全不同,不兼容,因此需要正确的内容。
就像Python解释器在使用Perl时会出错一样(反之亦然),当x86+Win32或JVM+Java字节码出现时,CLR解释器也会出错。如果您可以发布到您想要运行的特定程序的链接,我本人或其他人应该能够告诉您它的确切指令集、文件格式和API,以及您需要在Linux上安装什么才能运行它。希望这能帮上忙!
(有时你甚至需要两者兼而有之。例如,Openbve列车模拟器是C#,编译为PE/COFF+CLI+CLR,但可以选择使用为PE/COFF+Win32 32+x86编译的C二进制插件。在这种情况下,您需要葡萄酒下的Mono的Win32版本。如果CPU架构也是不同的,那就需要仿真;所以Qemu下的Mono在Wine之下)。
发布于 2011-03-21 02:22:55
简短的答案是:
.NET是微软对Java的回答,Mono是它的一个开源实现。Wine是针对本地用户的,与Mono无关,只是您可以使用它运行.NET运行时,就像其他任何原生Windows软件一样。
长话短说:
要理解葡萄酒和Mono(和.NET)之间的区别,您必须理解本地机器代码可执行文件和“公共语言运行库”(又称“虚拟机”可执行文件)之间的区别:
本机代码可执行文件使用特定于处理器的指令代码,并由处理器直接执行。这意味着必须为不同的处理器重新编译它们。通过直接运行此可执行代码并捕获它所做的任何库调用,makes能够为Windows运行本机代码可执行文件,并将它们重定向到它自己的Win32 API实现。
"CLR“或"VM”可执行文件并不是特定于一个处理器:它们需要额外的软件来使处理器能够运行它们。Mono/.NET就是这种系统的一个例子。.NET程序即使在Windows上运行时也需要安装.NET运行时。Java的工作方式是相同的。
所以:
1)葡萄酒与Mono之间的区别:葡萄酒用于运行为Windows制作的本机代码可执行文件,而Mono用于运行不一定适用于任何特定平台的Mono/.NET可执行文件。在Linux上安装Mono相当于在Windows上安装.NET运行时。
2)如果要运行的程序根本不使用.NET,则必须使用葡萄酒。莫诺在这里根本帮不了你。
但是,如果程序确实使用了.NET,那么您有两个选项,其中一个可能工作,也可能不起作用:
3)葡萄酒和Mono根本不相互依赖,但如上所述,您可以使用葡萄酒中的Microsoft运行时运行Mono/.NET应用程序。
https://askubuntu.com/questions/31273
复制相似问题