重复的符号错误: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框架。
解决方案是:
- 转到项目B>目标>构建阶段>从“带库的链接二进制文件”中删除JSON
- 确保JSON框架仍在项目中(不要删除它),以便项目B可以构建
- 构建项目B你不应该得到任何错误。 该项目应该构建但不嵌入JSON框架符号
- 在项目A中添加项目B产品(框架)和JSON框架
- 转到项目A>目标>构建阶段,检查项目B和JSON是否已添加到“使用库链接二进制文件”部分
- 建立你的项目A.
问候,