我是Mono的新手,刚开始。单声道程序是否从C#编译为本机代码,以便能够在多个OS上运行?
而且,我在MonoTouch上看到了一个截屏视频,告诉我单声道(尤其是)将所有内容编译为Native for C#以便能够在Iphone上运行。
我很困惑。
答案 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的不同,它可能会明确地为此提供便利。