MonoTouch Binding Library - EXC_BAD_ACCESS (SIGSEG

2019-09-07 06:11发布

问题:

My app crashes on my live device only, when I use the Kiip MonoTouch bindings. It works fine on the simulator. Here is part of my stack trace:

0   libsystem_c.dylib               0x30eb293c memset$VARIANT$CortexA8 + 52
1   sample                          0x002b5738 GC_clear_stack_inner (misc.c:298)
2   sample                          0x002b574c GC_clear_stack_inner (misc.c:299)
3   sample                          0x002b574c GC_clear_stack_inner (misc.c:299)
4   sample                          0x002b574c GC_clear_stack_inner (misc.c:299)
5   sample                          0x002b574c GC_clear_stack_inner (misc.c:299)
6   sample                          0x002b574c GC_clear_stack_inner (misc.c:299)
7   sample                          0x002b574c GC_clear_stack_inner (misc.c:299)
8   sample                          0x002b574c GC_clear_stack_inner (misc.c:299)
9   sample                          0x002b574c GC_clear_stack_inner (misc.c:299)
10  sample                          0x002b574c GC_clear_stack_inner (misc.c:299)
11  sample                          0x002b57b8 GC_clear_stack (misc.c:344)
12  sample                          0x002b2bd8 GC_malloc_atomic (malloc.c:270)
13  sample                          0x0026f374 mono_object_new_ptrfree_box (object.c:4416)
14  sample                          0x00102290 wrapper_managed_to_native_object___icall_wrapper_mono_object_new_ptrfree_box_intptr (mscorlib.dll.6.s:92590)
15  sample                          0x0001da78 System_Collections_Generic_Dictionary_2_intptr_System_WeakReference_TryGetValue_intptr_System_WeakReference_ (monotouch.dll.6.s:14642)
16  sample                          0x0000d1e4 MonoTouch_ObjCRuntime_Runtime_TryGetNSObject_intptr (monotouch.dll.6.s:6354)
17  sample                          0x0000d2f0 MonoTouch_ObjCRuntime_Runtime_GetNSObject_intptr (monotouch.dll.6.s:6380)
18  sample                          0x0000d3a4 MonoTouch_ObjCRuntime_Runtime_GetNSObjectWrapped_intptr (monotouch.dll.6.s:6415)
19  sample                          0x00023e08 wrapper_native_to_managed_MonoTouch_ObjCRuntime_Runtime_GetNSObjectWrapped_intptr (monotouch.dll.6.s:17991)
20  sample                          0x002bea2c get_managed_object_for_ptr_fast (monotouch-glue.m:346)
21  sample                          0x001ca1fc native_to_managed_trampoline_Kiip_KPManager_set_SharedManager (registrar.m:823)

Here is the SDK:

www.jmawebtechnologies.com/files/archive.zip

Here is the sample project

https://github.com/mono/monotouch-bindings/tree/master/Kiip

Here is the code where the software crashes:

AppDelegate > KPManager.SharedManager = new KPManager(

Here is the full crash log:

www.jmawebtechnologies.com/files/crash.zip

回答1:

This is because the libKiip.a library you're using doesn't have the architecture you're building for. This would happen for instance if the libKiip.a has armv6 and i386 code, but you're building for armv7.

At build time it should result in this warning:

warning MT1301: Native library `libKiip.a` (i386, ARMv7) was ignored since it does not match the current build architecture(s) (ARMv6)

The solution is either to change your MonoTouch project to use the architecture available in the libKiip.a library, or make sure you have the right architecture in the library (I believe the universal libKiip.a binary will do).