Mono 2.4 可以在 FreeBSD x86(或 x64)上提前编译(AOT)吗?

Mono 2.4 可以在 FreeBSD x86(或 x64)上提前编译(AOT)吗?

我使用一个运行 FreeBSD 7.2 的共享 Web 服务器(NearlyFreeSpeech.net,强烈推荐!),并希望使用 C# 为其编写 CGI 脚本,但他们尚未安装 Mono。如果我使用自己的 FreeBSD 7.2 机器并在那里编译我的 C# 程序,我可以正压通气编译我的代码并将二进制文件部署在 Mono-less 服务器上?

我知道 App Store 上有多个 iPhone 游戏在售,而且它们都是 AOT 编译的(针对 ARM)。上面引用的页面说 x86 和 x64 都受支持,但在我安装的 x86 Mac OS X Leopard Mono 上,我尝试了

sudo mono --aot /Library/Frameworks/Mono.framework/Versions/2.4.2.1/lib/mono/2.0/mscorlib.dll

sudo mono --full-aot /Library/Frameworks/Mono.framework/Versions/2.4.2.1/lib/mono/2.0/mscorlib.dll

并得到错误:

AOT compilation is not supported on this platform.

Failed to load AOT module '/Library/Frameworks/Mono.framework/Versions/2.4.2.1/lib/mono/2.0/mscorlib.dll.dylib' in aot-only mode.

我只是不想花很多精力让 FreeBSD 7.2 + Mono 2.4.2.1 工作,然后发现同样的事情:不支持 AOT 编译,这是我关心 FreeBSD + Mono 的唯一原因...

答案1

AOT 只是消除了(大多数)JIT 编译的需要。您仍然需要 VM 来提供它提供的所有其他服务 - 垃圾收集、元数据、IO、安全性、动态编译等。

AOT 在桌面环境中的优势在于减少启动时间、允许使用更昂贵的编译器优化,并允许应用程序之间共享代码。

iPhone 是一个特殊情况,因为它不允许动态库和 JITing。因此,CLI 代码被 AOT 编译为静态库,然后与精简的 Mono 运行时链接在一起,生成单个二进制文件。但是,禁用 JIT 会增加一些限制。例如,某些泛型用法是不可能的(AOT 编译器无法始终静态地确定需要编译哪些具体化的泛型类型),并且动态代码生成(IronPython 等语言需要)是不可能的。

你最好的选择是建立一个并行 Mono 环境- 要么直接在远程机器上构建它,要么在本地构建它,安装到某个临时前缀中,然后将其打包并复制过来。

相关内容