在 MonoTouch 中,我在为设备编译时遇到了这个奇怪的错误(在模拟器上它工作正常,只有在为 iPhone 编译时它才会崩溃):
Loaded assembly:
/private/var/mobile/Applications/FC6B7E68-E408-42A9-92A6-BC5AC73B3EEC/MyApp4.app/Mono.Security.dll
[External]
Loaded assembly:
/private/var/mobile/Applications/FC6B7E68-E408-42A9-92A6-BC5AC73B3EEC/MyApp4.app/System.dll
[External]
Loaded assembly:
/private/var/mobile/Applications/FC6B7E68-E408-42A9-92A6-BC5AC73B3EEC/MyApp4.app/monotouch.dll
[External]
unknown MONO_PATCH_INFO_JIT_ICALL_ADDR mono_marshal_safearray_create
* Assertion: should not be reached at ../../../../../mono/mono/mini/mini.c:3179
Stacktrace:
at (wrapper managed-to-native)
object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
Native stacktrace:
0 MyApp4 0x00628b38 mono_handle_native_sigsegv + 456
1 MyApp4 0x006561e4 sigabrt_signal_handler + 168
2 libsystem_c.dylib 0x337ed539 _sigtramp + 48
3 libsystem_c.dylib 0x337e2f5b pthread_kill + 54
4 libsystem_c.dylib 0x337dbfeb abort + 94
5 MyApp4 0x007a6310 monoeg_g_logv + 268
6 MyApp4 0x007a63e4 monoeg_assertion_message + 80
7 MyApp4 0x005fdea0 mono_resolve_patch_target + 2736
8 MyApp4 0x0061cd7c mono_aot_plt_resolve + 432
9 MyApp4 0x0062b460 mono_aot_plt_trampoline + 88
10 MyApp4 0x003948c0 generic_trampoline_aot_plt + 136
11 MyApp4 0x00357370
wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr
+ 200
12 MyApp4 0x006013a8 mono_jit_runtime_invoke + 2892
13 MyApp4 0x00714dd8 mono_runtime_invoke + 200
14 MyApp4 0x0070d6cc mono_runtime_class_init_full + 2060
15 MyApp4 0x0070ceb0 mono_runtime_class_init + 28
16 MyApp4 0x005fed78 mono_jit_compile_method_inner + 224
17 MyApp4 0x005fffa4 mono_jit_compile_method_with_opt + 660
18 MyApp4 0x00600bcc mono_jit_runtime_invoke + 880
19 MyApp4 0x00714dd8 mono_runtime_invoke + 200
20 MyApp4 0x007cc154 monotouch_init + 640
21 MyApp4 0x005f71d8 main + 3704
22 MyApp4 0x00070b58 start + 52
=================================================================
Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
这让我发疯。我不知道,崩溃似乎发生在调用任何代码之前。我在我的项目中使用了两个绑定库(TestFlight 和 CorePlot),所以这可能与 MonoTouch 在 iPhone 的 ARMV6 架构中存在的互操作编组问题有关。
任何帮助或建议,无论多么小,都会受到赞赏。谢谢!
更新:我可以确认使用实验性编译器(在为设备编译时在 MonoDevelop 中设置:LLVM armv7)该应用程序工作正常,根本没有崩溃。这似乎与 MonoTouch 的 armv6 绑定错误有关。但是我需要调试我的应用程序,并且 LLVM 编译器在调试模式下不起作用。有一些解决方法吗?
现在有一个关于 Xamarin 邮件列表的讨论:
http://monotouch.2284126.n4.nabble.com/Native-library-with-Monotouch-5-0-part-2-td3992408.html