我有一个包含objective-c静态库的monotouch应用程序。应用程序在模拟器上正确运行,但是当我尝试在iPhone 3GS上运行应用程序时,它在启动时崩溃。这些是我已尝试得到它的工作步骤:静态库应用程序在模拟器上运行,但不在实际设备上运行
- 编译在Xcode静态库设备规定和有源体系在ARMv6的集和ARMv7的(我不知道这是正确的,但我试了两次,都没有工作)。
- 在项目信息下,我将代码签名标识设置为我的开发人员密钥。 :在MonoDevelop中我已经通过设置额外的MonoTouch参数下iPhone打造有以下值(这等同于什么设置为iPhoneSimulator)包含在应用项目选择静态库
-v -v -v -gcc_flags “-lstdC++ -I $ {PROJECTDIR} /的UltraLite /包含-L $ {PROJECTDIR} /的UltraLite -lUltralite -force_load $ {PROJECTDIR} /Ultralite/libUltralite.a”
当我尝试运行应用程序时,它在启动时崩溃(s o应用程序屏幕甚至不出现)。在MonoDevelop的一切,我看到的是下面的异常消息:
Exception of type 'Mono.Debugger.Soft.VMDisconnectedException' was thrown.
所有我的设备日志Xcode中看到如下:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_PROTECTION_FAILURE at 0x2fd00f24
如果我删除从项目中-gcc_flags选项选项,然后应用程序启动,但在第一次尝试访问静态库时崩溃。所以这肯定是与静态库有关,导致应用程序在启动时崩溃。
我不知道从哪里开始解决这个问题,所以真的需要一些帮助。任何人都会对我所包含的静态库有什么问题有任何想法,或者知道哪里可以获得有关错误的更多信息?崩溃报告中的KERN_PROTECTION_FAILURE消息确实没有给我太多的帮助。
更新: 我创建了一个按键,点击它时调用静态库的方法的sayHello一个简单的Hello World应用程序。即使有这个基本的例子,我也遇到了同样的问题。即它在模拟器上运行,但不在实际设备上运行。我已经将我的helloworld示例上传到github。如果有人能帮助我完成这项工作,我将不胜感激。这里是世界您好样本:
https://github.com/BruceHill/HelloWorld
这包括基本的应用程序文件夹,用Objective-C的静态库文件夹,然后终于在btouch定义的文件夹。我用参数-outdir =调用btouch。构建Messaging.g.cs和UltraliteManager.g.cs然后将其包含在MonoTouch应用程序中。
精华:0主题名称:调度队列:com.apple.main线程 螺纹0坠毁: 0 Mobileforms \t 0x00fc0c1c mono_aot_get_class_from_name(AOT-runtime.c:1497) 1 Mobileforms \t 0x010225b0 mono_class_from_name( class.c:7092) 2 Mobileforms \t 0x0103ce80 mono_exception_from_name_domain(exception.c:58) 3 Mobileforms \t 0x0103ce38 mono_exception_from_name(exception.c:35) 4 Mobileforms \t 0x0103d418 mono_get_exception_null_reference(exception.c:280) – BruceHill 2011-05-09 09:40:59
我现在一个是更接近解决这个问题。我已经设法通过修改_Don't link_到_Link SDK程序集only_的构建选项中的_Linker行为_设置来实现我的_Hello World_示例。但是,当我在实际应用程序中进行此更改时,出现错误“mtouch failed with no output”,并在构建日志下看到链接器错误,指出符号未定义。例如,它说libUltralite.a中的“_SecRandomCopyBytes”和“_SecKeyGetBlockSize”是未定义的。 – BruceHill 2011-05-10 08:38:03