单声道编译C#和原生?

时间:2010-02-24 03:56:32

标签: mono xamarin.ios

我是Mono的新手,刚开始。单声道程序是否从C#编译为本机代码,以便能够在多个OS上运行?

而且,我在MonoTouch上看到了一个截屏视频,告诉我单声道(尤其是)将所有内容编译为Native for C#以便能够在Iphone上运行。

我很困惑。

6 个答案:

答案 0 :(得分:21)

Mono默认编译为中间字节码,然后在虚拟机上运行。此字节代码是可移植的,但不是本机机器代码。

单声道确实有an AOT compiler,当字节码不是一个选项时,会产生原生图像。

答案 1 :(得分:7)

几乎所有.NET平台,Microsoft(包括桌面,紧凑框架和微框架)和第三方(如mono)都首先将所有内容编译为可移植的公共中间语言,然后即时编译在执行本机代码期间。有些人没有JIT,只是直接解释IL。

本机代码显然是不可移植的。

这有帮助吗?

答案 2 :(得分:7)

检查'mkbundle'以将单声道运行时编译到您的可执行文件中。 例如。 mkbundle --static --deps Hello.exe -o hello

答案 3 :(得分:5)

Mono本身将编译为.NET CLR字节码,允许它在任何支持.NET或Mono的平台上执行。这些可执行文件不是由本机机器指令组成的;它们在执行它的系统上由运行时即时编译成本机代码。简而言之,Mono二进制文件是可移植的。

从CocoaTouch开始,将其编译为本机代码是必要的,因为Apple不允许在iPhone上使用Mono等系统。这是一个例外情况;正常的单声道节目不会这样做。

答案 4 :(得分:2)

是的,在针对Mono进行编译时,您可以使用c#或其他dotnet语言(如VB.Net)编写。 Mono将您的代码编译为您部署的IL(中间语言),然后在运行时编译JIT(及时)编译。

Mono可以运行许多平台,如Windows,Mac OSX,Linux甚至iPhone。虽然使用iPhone实现,但我相信您的代码实际上是无缝编译为Objective C,然后编译为本机代码而不是IL。

答案 5 :(得分:1)

Mono项目的核心是MSIL的JITter(.NET编译器生成的中间语言)。

当然,Just-In-Time Compiler仍然是一个编译器,您可以使用JIT进程生成的本机代码并稍后运行。根据JITter的不同,它可能会明确地为此提供便利。