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

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

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

在此处输入图像描述

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

在此处输入图像描述

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

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

这是Xcode给出的确切错误:

ld: duplicate symbol _OBJC_CLASS_$_SBJsonParser 

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

谢谢!

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

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

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

请参阅以下演练以了解管理该任务的想法: 通过从静态库中删除类来避免链接期间出现重复的符号错误

FaceBookConnect Framework(让我们称之为项目B)和我的项目(项目A)有同样的问题。 两者都再次链接JSON框架。

解决方案是:

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

问候,