如何使用 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?