重复符号_OBJC_METACLASS_$_SBJsonParser

Posted

技术标签:

【中文标题】重复符号_OBJC_METACLASS_$_SBJsonParser【英文标题】:Duplicate symbol _OBJC_METACLASS_$_SBJsonParser 【发布时间】:2012-07-16 05:16:16 【问题描述】:

我刚刚将 AWSiosSDK.framework 和 Facebook SDK 一起包含在我的项目中,然后出现构建错误:

ld:重复符号 _OBJC_METACLASS_$_SBJsonParser 在 /Users/tom8/Desktop/site1/site1/facebook-ios-sdk/libfacebook_ios_sdk.a(SBJsonParser.o) 和 /Users/tom8/Desktop/AWSiOSSDK.framework/AWSiOSSDK( SBJsonParser.o) 用于架构 i386

我使用 iOS Facebook SDK 静态库,所以我不能简单地删除 facebooksdk 文件夹中的 sbjson 文件。我还尝试删除 AWSIOSSDK 文件夹中的 sbjson 文件,但它也不起作用。有人能给我一些建议吗?

【问题讨论】:

项目中两次获取 SBJsonParser 文件。您需要删除其中一个文件引用。来自 AWSIOSSDK 或来自 Facebook。 这个我知道,但问题是如何删除它。 【参考方案1】:

几乎无一例外,当我得到重复的符号构建错误时,这是​​因为我从其他 .h 文件中#include-ing .h 文件过多。解决方案几乎总是这两个简单的步骤:

    将尽可能多的#include 指令移动到 .m 文件中 在 .h 文件中使用 @protocol 和 @class 前向声明。

需要从.h 中#include .h 的情况是您实际扩展一个类或实现一个协议。如果您只需要在签名中使用类名或协议名,请使用前向声明并将#include 移动到 .m 文件中。

示例:

foo.h

#include "Bar.h"
#include "BazProtocol.h"
#include "BarDelegateProtocol.h"
@interface Foo:NSObject <BarDelegate>
@property (strong, nonatomic) id<Baz> myBaz;
@property (strong, nonatomic) Bar *myBar;
@end

变成

#include "BarDelegateProtocol.h"
@class Bar;
@protocol Baz;

@interface Foo:NSObject
@property (strong, nonatomic) id<Baz> myBaz;
@property (strong, nonatomic) Bar *myBar;
@end

【讨论】:

您所描述的当然是一个好主意,但它对重复符号 linker 错误没有帮助。您还应该使用#import 而不是#include 来防止将相同的标头多次包含到同一个编译单元中,这会产生重复的符号编译器错误。【参考方案2】:

我也有同样的问题。您可以从 Facebook 项目本身删除文件,但不能从框架中删除。

所以点击:

facebook-ios-sdk.xcodeproj(打开文件内容)-> FBConnect(查看文件夹内容)-> JSON(查看文件夹内容)-> 删除 SBJsonWriter 和 SBJsonParser。

尝试编译。你应该很高兴!

伊娃

【讨论】:

以上是关于重复符号_OBJC_METACLASS_$_SBJsonParser的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 13 更新后出现未定义符号错误

链接器命令失败,退出代码为 1 - 重复符号 __TMRbBp

架构 x86_64 的重复符号

未解析的外部符号__guard_fids_table [重复]

dyld:找不到符号:尝试在iOS7上运行时_OBJC_CLASS_$_UIUserNotificationSettings [重复]

架构 x86_64 的 1159 个重复符号