FacebookSDK 3.0 - Apple Mach-O 链接器错误

13

我正在尝试在我的一个应用程序中实现Facebook,因此按照Hackbook上的官方Facebook教程进行了操作。 https://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/

我按照说明完成了一切,没有任何错误或警告。然而,当我尝试构建应用程序时,出现了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提供的示例按预期工作。我在网上试过各种提示,但到目前为止没有一个有效。也许这里有人对API了解得更多,并能给我一个好的提示 :)


你尝试过为设备(iPhone/iPad等)构建吗?在尝试时是否有不同的错误消息?现在看起来有点像您正在尝试将模拟器构建链接到设备库。 - Till
嘿,我已经在iPhone和iPad模拟器上以及我的设备上尝试过了,但错误仍然存在。 - Blade
错误不应该保持不变。如果是这样,错误底部的架构应该会出现“ld: symbol(s) not found for architecture armv7”的故障。 - CodaFi
没错。我是指我发布的那些错误。 - Blade
你是否可能在文件中没有导入这个框架#import - CodaFi
显示剩余3条评论
3个回答

19

谢谢,我实际上忘记了参考。我太傻了 :D - Blade
2
如果您添加了NSString *const FBSessionStateChangedNotification = @"FBSessionStateChangedNotification";,则会出现链接器错误(对于我来说,使用3.0 SDK会出现重复符号),但感谢您指向sqlite3.0!完全错过了项目设置中的该部分。 - cbowns
1
请确保将其添加到目标构建设置中,仅将其添加到项目构建设置中对我来说不起作用。 - FierceMonkey
有人能告诉我为什么我们需要添加对-lsqlite3.0的引用吗?我在文档中没有看到任何详细信息。 - Pavan Kotesh

4

我觉得你漏掉了这个步骤

前往 项目 -> 构建阶段 -> 链接二进制文件 -> 添加 -> -lsqlite3.0


1

是的,我找到了解决方案:libsqlite3.dylib。我使用的是编译为armv6而不是7的版本,所以你需要下载Xcode dmg文件(4.2以上版本),并从中提取该库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接