重复的符号错误:SBJsonParser.o?

时间:2012-07-22 20:00:49

标签: ios duplicates symbols sbjson

我目前在我的项目中有ShareKit,它被编译为静态库。它已得到妥善实施。我还通过将他们的框架添加到我的项目中来实现亚马逊的AWS SDK。

似乎重复的符号来自亚马逊的AWS SDK文件“AWSIOSSDK”。这就是它的样子:

enter image description here

该文件与ShareKit的文件libShareKit.a发生冲突。这就是该文件的样子:

enter image description here

无论如何,这两个文件都是我以前从未见过的文件。似乎有些JSON文件在它们之间发生冲突。

我已经查看了其他SO问题,并且他们说要使用已编译的源代码执行某些操作,但这些文件都不在任何库的已编译源中。

以下是Xcode给出的确切错误:

ld: duplicate symbol _OBJC_CLASS_$_SBJsonParser

无论如何,有没有人有任何想法我应该做什么?除非我解决了这个问题,否则我的应用程序无法编译。

谢谢!

3 个答案:

答案 0 :(得分:5)

您可以继续将库存档拆分为其目标文件,并通过省略重复项来再次合并它们。

请参阅以下演练,了解如何管理该任务: Avoiding duplicate symbol errors during linking by removing classes from static libraries

答案 1 :(得分:4)

这两个都在其静态库中构建了SBJsonParser。这不是构建静态库的正确方法。每个应该在没有SBJson的情况下构建,然后您应该将所有这些与SBJson链接在一起。有几种解决方案:

  • 重建这些库(或让其维护者这样做)不将第三方库直接包含在静态库中。这是理想的解决方案。
  • 使用SBJson.a文件中删除不正确的ar文件。您应该可以使用ar -t列出.a中的对象,然后ar -d来删除那些不应该在那里的对象。您当然也可以ar -x提取所有.o文件并直接链接它们。

答案 2 :(得分:0)

我遇到了与FaceBookConnect Framework(我们称之为项目B)和我的项目(项目A)相同的问题。两者都再次链接JSON框架。

解决方案是:

  1. 转到项目B>目标>构建阶段>从“带库的链接二进制文件”
  2. 中删除JSON
  3. 确保JSON框架仍在项目中(不要删除它),以便项目B可以构建
  4. 构建项目B不应该出现任何错误。该项目应该构建但不嵌入JSON框架符号
  5. 在项目A中添加项目B产品(框架)和JSON框架
  6. 转到项目A>目标>构建阶段并检查项目B和JSON是否已添加到“使用库链接二进制文件”部分
  7. 构建项目A
  8. 此致