如何使用 monotouch 编译库(出现错误:尝试使用 --aot-only 进行 JIT 编译)

Posted

技术标签:

【中文标题】如何使用 monotouch 编译库(出现错误:尝试使用 --aot-only 进行 JIT 编译)【英文标题】:How to compile libraries with monotouch (getting error : attempting to JIT-compile with --aot-only) 【发布时间】:2011-03-13 10:11:50 【问题描述】:

我正在尝试在单点触控项目中使用 DotNetZip (http://dotnetzip.codeplex.com/)。

我已经为 monotouch 重新编译了它,通过在 MonoDevelop 下创建两个新的 monotouch 项目(一个用于 ZLib,另一个用于 DotNetZip),将代码放入其中,删除引用 Windows 窗体的代码,并在项目选项中设置 Compile Target = Library

我在编译之前将 MonoDevelop 中的活动配置设置为“Release - iPhone”。

然后,我在我的 monotouch 主项目中引用了生成的 DLL。

在模拟器中运行时效果很好,但是当我尝试在实际设备(在我的情况下为 iPod Touch 4)上调试它时,我在运行时收到错误:

System.ExecutionEngineException 已被抛出

在使用 --aot-only 运行时尝试 JIT 编译方法“Vortaro.SearchTableViewSource:.ctor (Vortaro.SearchViewController)”。

这发生在这一行:

using (ZipFile zip = ZipFile.Read ("dictionary.zip")) 

--

我还测试了一个仅在单击按钮时执行此操作的简单示例:

ZipFile.Read ("dictionary.zip");

我得到这个错误:

未处理的异常:System.ExecutionEngineException: 在使用 --aot-only 运行时尝试 JIT 编译方法“Ionic.Zip.ZipContainer:.ctor (object)”。

在 /Users/(...)/ZipDirEntry.cs:199 中的 Ionic.Zip.ZipEntry.ReadDirEntry (Ionic.Zip.ZipFile zf) [0x000b5]

当我查看错误指向的构造函数时,我看不到任何可能导致 JIT 编译的内容:

public ZipContainer(Object o)

    _zf = (o as ZipFile);
    _zos = (o as ZipOutputStream);
    _zis = (o as ZipInputStream);

【问题讨论】:

【参考方案1】:

这是 ios 施加的限制:无法按需生成代码。所以你需要弄清楚的问题是为什么你的代码试图 JIT 编译 Vortaro.SearchTableViewSource.ctor,这可能是因为你有一个使用它的泛型类型,或者你正在调用 Type.GetType ()

该错误看起来不像来自 dotnetzip 库,而是来自您的代码(查看类型名称)

【讨论】:

我没有在我的代码中使用反射或泛型类型。我用一个简单的例子再次测试:ZipFile.Read ("dictionary.zip");单击按钮时,我现在收到此错误: Unhandled Exception: System.ExecutionEngineException: Attempting to JIT compile method 'Ionic.Zip.ZipContainer:.ctor (object)' while running with --aot-only. 所以听起来他们在反思。一个简单的解决方法(但会使您的可执行文件膨胀)是禁用链接器。 我已经禁用了链接器。而且我在错误消息引用的构造函数中看不到任何反射的使用(请参阅我的问题,我已经更新了它)。有没有办法确定究竟是什么代码导致了“ExecutionEngineException: Attempting to JIT compile”错误?

以上是关于如何使用 monotouch 编译库(出现错误:尝试使用 --aot-only 进行 JIT 编译)的主要内容,如果未能解决你的问题,请参考以下文章

如何分析 Monotouch 以查看运行时创建的蹦床数量(按类型)?

如何在模拟器中为 MonoTouch 应用程序生成 .dSYM?

如何在 DialogViewController (Monotouch.Dialog) 上设置背景颜色

尝试从 monotouch 打开故事板给我一个错误

无法在 monotouch 中使用本机库

MonoTouch <--> 静态库异常:无法在包中加载 NIB