2012-07-16 46 views
0

我只是包括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靜態庫,所以我不能簡單地刪除sbjson文件在facebooksdk文件夾中。我也嘗試刪除AWSIOSSDK文件夾中的sbjson文件,但它也不起作用。有人能給我一些建議嗎?

+0

它在項目中獲得兩次SBJsonParser文件。您需要刪除其中一個文件參考。無論是從AWSIOSSDK還是從Facebook。 – 2012-07-16 05:20:37

+0

我知道這一點,但問題是如何刪除它。 – zhyr28 2012-07-16 05:27:58

回答

1

幾乎沒有例外,當我得到重複的符號構建錯誤時,這是​​因爲我包含.h文件過多地與其他.h文件包含在一起。該解決方案几乎總是這兩個簡單的步驟:

  1. 此舉儘可能多的#include指令到.m文​​件儘可能
  2. 使用@protocol和@class .h文件中向前聲明。

只有案件,你需要#包括從一個.H一個.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 
+0

你描述的當然是一個好主意,但它不會幫助重複的符號*鏈接器*錯誤。您還應該使用'#import'而不是'#include'來防止多次將相同的頭文件包含到同一個編譯單元中,這會產生重複的符號*編譯器*錯誤。 – Sven 2012-08-18 20:10:40

0

我有同樣的問題了。您可以從Facebook項目本身刪除文件,但不能從框架中刪除。

所以點擊:

Facebook的IOS-sdk.xcodeproj(打開文件內容) - > FBConnect(查看文件夾的內容) - > JSON(查看文件夾的內容) - >刪除SBJsonWriter和SBJsonParser。

嘗試編譯。你應該很好走!

Eva