我刚刚将 AWSIOSSDK.framework 和 Facebook SDK 一起包含在我的项目中,然后出现构建错误:
ld: duplicate symbol _OBJC_METACLASS_$_SBJsonParser in /Users/tom8/Desktop/site1/site1/facebook-ios-sdk/libfacebook_ios_sdk.a(SBJsonParser.o) and /Users/tom8/Desktop/AWSiOSSDK.framework/AWSiOSSDK(SBJsonParser.o) for architecture i386
我使用iOS Facebook SDK静态库,所以我不能简单地删除facebooksdk文件夹中的sbjson文件。我还尝试删除 AWSIOSSDK 文件夹中的 sbjson 文件,但也不起作用。有人可以给我一些建议吗?
最佳答案
几乎无一异常(exception),当我遇到重复的符号构建错误时,这是因为我过多地从其他 .h 文件中 #include-ing .h 文件。解决方案几乎总是这两个简单的步骤:
- 将尽可能多的 #include 指令移至 .m 文件中
- 在 .h 文件中使用 @protocol 和 @class 前向声明。
唯一需要从 .h 中 #include 的情况是当您实际扩展类或实现协议(protocol)时。如果您只需要在签名中使用类名或协议(protocol)名称,请使用前向声明并将 #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
关于iphone - 重复符号_OBJC_METACLASS_$_SBJsonParser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11498462/