iPhone:在应用程序中使用静态库会导致设备崩溃,但不会导致iphone模拟器崩溃

时间:2009-10-10 16:49:58

标签: iphone objective-c cocoa-touch xcode xcodebuild

我有一个库,现在我想在应用程序中使用它。我相信我已经正确地链接到了图书馆。以下是我所做的所有事情:

  • 设置标题搜索路径
  • 将其他链接器标志设置为“-ObjC”
  • 添加了静态库xcode项目
  • 确保将lib.a列为框架目标
  • 将库添加为直接依赖

就像我在标题中说的那样,我已经在模拟器中使用静态库成功运行了应用程序。一旦我尝试使用设备测试应用程序,它会崩溃第二个必须使用库中的函数:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSDate firstOfCurrentMonth]: unrecognized selector sent to class 0x3841bb44'
2009-10-10 12:45:31.159 Basement[2372:207] Stack:

2 个答案:

答案 0 :(得分:2)

这是由于当前SDK链接器中存在错误。有关问题和可能的解决方法的详细信息,请参阅this post。 (另见this post。)

<强>更新

您可以尝试的另一件事是删除静态库并将库的源文件直接包含在应用程序的项目中。我正面临一个类似的静态库链接问题,这就是我最终重新开始使其成功运行。如果这样可行(无论多么严重的解决方法)那么它绝对是一个链接器问题。

答案 1 :(得分:0)

我最近遇到了这个问题。当我注意到另一个我有DID工作的类别时,我无法让-all_load工作。我对这个类别很懒,并将其包含在另一个文件中。

我最终创建了一个虚拟类(没有方法,实例变量),并在该虚拟类的.m文件中包含了我的类别的实现。执行此操作后,即使我删除了-all_load标志,我的类别也开始工作。

这是在iPhone OS 3.1.3上。

这肯定不是修复它的正确方法,但似乎有效。

我的blog上的完整示例代码适用于我的(普通)类别。