我有一个单调的应用程序,其中包括一个objective静态库。应用程序在模拟器上正确运行,但是当我尝试在我的iPhone 3GS上运行应用程序时,它会在启动时崩溃。以下是我为使它发挥作用所采取的步骤:
${ProjectDir}/Ultralite/libUltralite.a" -v -gcc_flags "-lstdc++ -I${ProjectDir}/Ultralite/-lstdc++{ProjectDir}/Ultralite -lUltralite -force_load -L$
当我尝试运行应用程序时,它会在启动时崩溃(因此应用程序屏幕甚至不会出现)。在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消息实际上并没有给我提供太多的工作机会。
更新:我已经创建了一个简单的Hello应用程序,它有一个按钮,当单击该按钮时,它会在静态库中调用一个方法sayHello。即使有了这个基本的例子,我也遇到了同样的问题,即它在模拟器上运行,而不是在实际的设备上运行。我已经将我的helloworld示例上传到github。如果有人能帮我解决这个问题,我会非常感激的。这里是Hello示例:
https://github.com/BruceHill/HelloWorld
这包括一个用于基本应用程序的文件夹,一个带有objective静态库的文件夹,然后是一个用于btouch定义的文件夹。我调用参数-outdir=。来构建Messaging.g.cs和UltraliteManager.g.cs,然后将它们包含在MonoTouch应用程序中。
发布于 2011-05-12 01:42:41
为了让它在iphone上正常工作,我不得不做两个改变:
构建选项中的
添加-framework安全性。
因此,构建选项下的其他单调参数必须具有以下值:
-v -gcc_flags "-framework Security -lstdc++ -I${ProjectDir}/Ultralite/Include -L${ProjectDir}/Ultralite -lUltralite -force_load ${ProjectDir}/Ultralite/libUltralite.a“
我必须添加安全框架的原因是,当在构建选项中指定了不链接时,MonoTouch似乎包含了该框架,而在设置了其他两个选项时则不包括该框架。我通过比较不同选项的构建日志来确定这一点。
发布于 2011-05-10 01:05:31
打开XCode组织者。插上你的设备。然后看看那些撞车事件。这些数据将具有象征意义,你至少会看到它在哪一点上失败了。
发布于 2011-05-10 07:20:47
在MonoTouch通过BTouch连接第三方库时,我也遇到了类似的问题。相同的异常类型和代码。
您必须获得该第三方库的源代码,并编译它的拇指禁用。XCode有这个选项,只需在选项中搜索拇指。LibUltralit.a最终会变大一点。
https://stackoverflow.com/questions/5934121
复制相似问题