我是 Mono 的新手,最近才开始。单声道程序是否从 C# 编译为本机代码以便能够在多个操作系统上运行?
而且,我在 MonoTouch 上看到了一个截屏视频,它告诉我 monotouch(特别是)将所有内容编译为 Native,以便 C# 能够在 Iphone 上运行。
我很困惑。
我是 Mono 的新手,最近才开始。单声道程序是否从 C# 编译为本机代码以便能够在多个操作系统上运行?
而且,我在 MonoTouch 上看到了一个截屏视频,它告诉我 monotouch(特别是)将所有内容编译为 Native,以便 C# 能够在 Iphone 上运行。
我很困惑。
Mono 默认编译为中间字节码,然后在虚拟机上运行。这个字节码是可移植的,但不是本地机器码。
Mono 确实有一个 AOT 编译器,当字节码不是一个选项时,它将生成本机图像。
几乎所有 .NET 平台,包括 Microsoft(包括桌面、紧凑框架和微框架)和第三方(例如 mono)首先将所有内容编译为可移植的通用中间语言,然后在执行期间即时编译为本机代码。有些没有 JIT,只是直接解释 IL。
本机代码显然是不可移植的。
这有帮助吗?
Check out 'mkbundle' to compile the mono runtime into your executable. eg. mkbundle --static --deps Hello.exe -o hello
Mono 本身将编译为 .NET CLR 字节码,允许它在任何支持 .NET 或 Mono 的平台上执行。这些可执行文件不是由本机机器指令组成的;它们由执行它的系统上的运行时即时编译为本机代码。简而言之,Mono 二进制文件是可移植的。
从 CocoaTouch 开始,将其编译为本机代码是必要的,因为 Apple 不允许在 iPhone 上使用 Mono 等系统。这是一个例外情况;普通的 Mono 程序不会这样做。
是的,在针对 Mono 进行编译时,您可以使用 c# 或 VB.Net 等其他 dotnet 语言编写。Mono 将您的代码编译为您部署的 IL(一种中间语言),然后在运行时编译 JIT(及时)。
Mono 可以运行多种平台,如 Windows、Mac OSX、Linux 甚至 iPhone。尽管使用 iPhone 实现,但我相信您的代码实际上已无缝编译为 Objective C,然后编译为本机代码而不是 IL。
Mono 项目的核心是 MSIL(.NET 编译器生成的中间语言)的 JITter。
当然,即时编译器仍然是编译器,您可以只获取 JIT 进程生成的本机代码,然后再运行它。根据 JITter,它可能会明确地为此提供设施。