首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >葡萄酒与单品的区别

葡萄酒与单品的区别
EN

Ask Ubuntu用户
提问于 2011-03-21 01:43:27
回答 2查看 31K关注 0票数 36

据我所知,葡萄酒和Mono都用于在Ubuntu下运行Windows应用程序。

所以我想知道

  1. 他们有什么不同?它们都是虚拟机吗?还是每一种都属于其他类别?
  2. 什么时候用哪种Windows应用程序更好呢?例如,那些可能需要或不需要.net框架的应用程序。
  3. 他们互相依赖吗?他们需要一起安装吗?还是每个人都是独立工作而不存在对方?

谢谢和问候!

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2011-03-21 02:34:19

成功地运行一个程序需要三样东西匹配:

  • CPU指令集x86在你的电脑,ARM在你的移动电话,PowerPC在一些苹果Mac,Java字节码为Java,CLI用于".Net"/Mono应用程序)
  • 二进制文件格式(例如。PE/COFF ".exe“用于Microsoft,.jar用于Java,PE32 ".exe",ELF在Unix/Linux上)
  • 应用程序接口;(例如。Linux/Unix上的POSIX,Mac上的Cocoa,Microsoft上的Win32,".Net"/Mono应用程序的基类库)。

您可以通过拥有模拟器/解释器(用于其他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/CLI/VES套件,可以在Mac、Mono和Linux上运行。
  • Win32是一个Win32 API实现,可以在Mac、MS和Linux上运行。
  • 您可以运行Mono之上的葡萄酒,在任何操作系统之上。
  • 您可以在Qemu之上运行葡萄酒,在任何CPU架构之上运行。

因此,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之下)。

票数 39
EN

Ask Ubuntu用户

发布于 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,那么您有两个选项,其中一个可能工作,也可能不起作用:

  • 您可以尝试使用Mono运行它。如果.NET程序也使用win32 API中的本机函数,这将失败,许多(但不是所有)为Windows开发的.NET应用程序都会这样做。
  • 或者,您可以在葡萄酒中安装Microsoft .NET运行时,然后通过它运行.NET应用程序。在这种情况下,你根本不用Mono。

3)葡萄酒和Mono根本不相互依赖,但如上所述,您可以使用葡萄酒中的Microsoft运行时运行Mono/.NET应用程序。

票数 24
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/31273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档