11

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

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

我很困惑。

4

6 回答 6

22

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

Mono 确实有一个 AOT 编译器,当字节码不是一个选项时,它将生成本机图像。

于 2010-02-24T04:03:53.233 回答
7

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

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

这有帮助吗?

于 2010-02-24T04:03:24.960 回答
7

Check out 'mkbundle' to compile the mono runtime into your executable. eg. mkbundle --static --deps Hello.exe -o hello

于 2012-02-03T22:11:49.923 回答
5

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

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

于 2010-02-24T04:01:46.323 回答
2

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

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

于 2010-02-24T04:04:19.210 回答
1

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

当然,即时编译器仍然是编译器,您可以只获取 JIT 进程生成的本机代码,然后再运行它。根据 JITter,它可能会明确地为此提供设施。

于 2010-02-24T04:00:23.523 回答