2012-08-11 54 views
13

我正試圖在我的一個應用程序中實現Facebook,因此遵循官方的Facebook教程Hackbook。 https://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/FacebookSDK 3.0 - Apple Mach-O鏈接程序錯誤

我實現了所描述的一切,並且沒有收到任何錯誤或警告。但是,當我嘗試構建應用程序時,我得到17個Mach-O鏈接程序錯誤。

Undefined symbols for architecture i386: 
    "_FBSessionStateChangedNotification", referenced from: 
     -[ForeverMainViewController sessionStateChanged:state:error:] in ForeverMainViewController.o 
    "_sqlite3_bind_double", referenced from: 
     -[FBCacheIndex _updateEntryInDatabaseForKey:entry:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _writeEntryInDatabase:] in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_bind_int", referenced from: 
     -[FBCacheIndex _updateEntryInDatabaseForKey:entry:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _writeEntryInDatabase:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _trimDatabase] in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_bind_text", referenced from: 
     -[FBCacheIndex _updateEntryInDatabaseForKey:entry:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _writeEntryInDatabase:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _readEntryFromDatabase:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _removeEntryFromDatabaseForKey:] in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_close", referenced from: 
     ___23-[FBCacheIndex dealloc]_block_invoke_0 in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_column_double", referenced from: 
     -[FBCacheIndex _readEntryFromDatabase:] in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_column_int", referenced from: 
     -[FBCacheIndex _readEntryFromDatabase:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _fetchCurrentDiskUsage] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _trimDatabase] in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_column_text", referenced from: 
     -[FBCacheIndex _readEntryFromDatabase:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _trimDatabase] in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_errmsg", referenced from: 
     _releaseStatement in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _updateEntryInDatabaseForKey:entry:] in FacebookSDK(FBCacheIndex.o) 
     _initializeStatement in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _writeEntryInDatabase:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _readEntryFromDatabase:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _fetchCurrentDiskUsage] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _removeEntryFromDatabaseForKey:] in FacebookSDK(FBCacheIndex.o) 
     ... 
    "_sqlite3_exec", referenced from: 
     ___36-[FBCacheIndex initWithCacheFolder:]_block_invoke_0 in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_finalize", referenced from: 
     _releaseStatement in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_open_v2", referenced from: 
     ___36-[FBCacheIndex initWithCacheFolder:]_block_invoke_0 in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_prepare_v2", referenced from: 
     _initializeStatement in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_reset", referenced from: 
     _initializeStatement in FacebookSDK(FBCacheIndex.o) 
    "_sqlite3_step", referenced from: 
     -[FBCacheIndex _updateEntryInDatabaseForKey:entry:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _writeEntryInDatabase:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _readEntryFromDatabase:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _fetchCurrentDiskUsage] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _removeEntryFromDatabaseForKey:] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _dropTrimmingTable] in FacebookSDK(FBCacheIndex.o) 
     -[FBCacheIndex _trimDatabase] in FacebookSDK(FBCacheIndex.o) 
     ... 
ld: symbol(s) not found for architecture i386 

重新實現,清潔應用,確保一切之後在那裏,我的想法。我也在另一個應用程序中實現了它,但又重新發現了錯誤。然而,來自Facebook的給定樣本按預期工作。我在互聯網上做了各種各樣的tipps,但他們都沒有工作到目前爲止。也許這裏有人知道一些有關的API並具有很好的提示我:)

+0

您是否嘗試過設備(iPhone/iPad,..)以及?嘗試時有沒有不同的錯誤信息?現在看起來有點像你試圖將模擬器構建與設備庫相鏈接。 – Till 2012-08-11 18:46:02

+0

嘿,我試着用iphone和ipad模擬器,也在我的設備上,但錯誤保持不變。 – Blade 2012-08-11 18:46:46

+0

好吧,那麼......你確定你是否按照關於SDK的鏈接指示(應包含在該框架中)? – Till 2012-08-11 18:48:32

回答

19

我認爲你缺少這一行

的NSString * const的FBSessionStateChangedNotification = @「FBSessionStateChangedNotification」;

並添加參考-lsqlite3.0

https://developers.facebook.com/docs/getting-started/getting-started-with-the-ios-sdk/#project

+0

謝謝,我其實忘了參考。傻我:D – Blade 2012-08-12 13:17:31

+0

謝謝..!這真的幫了我很多 – 2012-09-05 07:32:41

+2

如果你添加'NSString * const FBSessionStateChangedNotification = @「FBSessionStateChangedNotification」;',但是感謝指向sqlite3.0,你會得到鏈接器錯誤(對於我用3.0 SDK的重複符號)!完全錯過 – cbowns 2012-09-20 22:43:44

4

我認爲你缺少這

轉到項目 - > BuildPhase->鏈接二進制添加 - > - lsqlite3.0

1

是的,我發現解決方案:libsqlite3.dylib,我用armv6編譯不是7,所以你下載Xcode dmg文件(超過4.2),並從它提取的lib。