首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有静态库的应用程序在模拟器上运行,而在实际设备上不运行。

带有静态库的应用程序在模拟器上运行,而在实际设备上不运行。
EN

Stack Overflow用户
提问于 2011-05-09 08:01:06
回答 4查看 1.1K关注 0票数 1

我有一个单调的应用程序,其中包括一个objective静态库。应用程序在模拟器上正确运行,但是当我尝试在我的iPhone 3GS上运行应用程序时,它会在启动时崩溃。以下是我为使它发挥作用所采取的步骤:

  • 用Xcode编译了静态库,指定了设备,并在armv6和armv7上设置了活动架构(我不确定哪种方法是正确的,但两者都不正确)。在项目信息下,
  • 将代码签名标识设置为我的开发人员密钥。在MonoDevelop中,通过将iPhone build下的附加单调参数设置为具有以下值(这与为iPhoneSimulator设置的内容相同),
  • 在应用程序项目选项中包含了静态库:

${ProjectDir}/Ultralite/libUltralite.a" -v -gcc_flags "-lstdc++ -I${ProjectDir}/Ultralite/-lstdc++{ProjectDir}/Ultralite -lUltralite -force_load -L$

当我尝试运行应用程序时,它会在启动时崩溃(因此应用程序屏幕甚至不会出现)。在MonoDevelop中,我看到的全部是以下异常消息:

代码语言:javascript
复制
Exception of type 'Mono.Debugger.Soft.VMDisconnectedException' was thrown.

我在Xcode中的设备日志中看到的所有内容如下:

代码语言:javascript
复制
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应用程序中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-12 01:42:41

为了让它在iphone上正常工作,我不得不做两个改变:

构建选项中的

  1. 链接器行为必须设置选项链接所有程序集。
  2. i必须向gcc_flags.

添加-framework安全性。

因此,构建选项下的其他单调参数必须具有以下值:

-v -gcc_flags "-framework Security -lstdc++ -I${ProjectDir}/Ultralite/Include -L${ProjectDir}/Ultralite -lUltralite -force_load ${ProjectDir}/Ultralite/libUltralite.a“

我必须添加安全框架的原因是,当在构建选项中指定了不链接时,MonoTouch似乎包含了该框架,而在设置了其他两个选项时则不包括该框架。我通过比较不同选项的构建日志来确定这一点。

票数 3
EN

Stack Overflow用户

发布于 2011-05-10 01:05:31

打开XCode组织者。插上你的设备。然后看看那些撞车事件。这些数据将具有象征意义,你至少会看到它在哪一点上失败了。

票数 1
EN

Stack Overflow用户

发布于 2011-05-10 07:20:47

在MonoTouch通过BTouch连接第三方库时,我也遇到了类似的问题。相同的异常类型和代码。

您必须获得该第三方库的源代码,并编译它的拇指禁用。XCode有这个选项,只需在选项中搜索拇指。LibUltralit.a最终会变大一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5934121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档