重复符号_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的主要内容,如果未能解决你的问题,请参考以下文章
链接器命令失败,退出代码为 1 - 重复符号 __TMRbBp
未解析的外部符号__guard_fids_table [重复]
dyld:找不到符号:尝试在iOS7上运行时_OBJC_CLASS_$_UIUserNotificationSettings [重复]