【问题标题】:FacebookSDK 3.0 - Apple Mach-O Linker ErrorFacebookSDK 3.0 - Apple Mach-O 链接器错误
【发布时间】:2012-08-08 15:24:46
【问题描述】:

我正在尝试在我的一个应用程序中实现 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,..)构建?尝试时是否有不同的错误消息?现在看起来有点像您正在尝试将模拟器构建与设备库链接。
  • 嘿,我在 iphone 和 ipad 模拟器以及我的设备上尝试过,但错误仍然存​​在。
  • 好的,那么...您确定您按照关于链接 SDK 的说明进行操作(应该包含在该框架中)吗?
  • 只是为了确保我会再次。但是,是的,我有 99.9% 的把握!
  • 错误不应该保持不变。如果确实如此,错误底部的架构应该会失败并显示ld: symbol(s) not found for architecture armv7

标签: ios xcode facebook api


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我认为你错过了这个

    转到项目->BuildPhase->链接二进制-添加->-lsqlite3.0

    【讨论】:

      【解决方案3】:

      我认为你错过了这一行

      NSString *const FBSessionStateChangedNotification = @"FBSessionStateChangedNotification";

      并添加对-lsqlite3.0的引用

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

      【讨论】:

      • 谢谢,其实我忘记参考了。傻我:D
      • 谢谢你..!这真的对我有很大帮助
      • 如果您添加 NSString *const FBSessionStateChangedNotification = @"FBSessionStateChangedNotification”;,您将收到链接器错误(我使用 3.0 SDK 时出现重复符号),但感谢您指向 sqlite3.0!完全错过了项目设置中的那个部分。
      • 确保将其添加到目标构建设置中,仅将其添加到项目构建设置中对我不起作用。
      • 有人能告诉我为什么我们需要添加对-lsqlite3.0的引用吗?我没有在文档中看到任何详细信息
      猜你喜欢
      • 2014-04-06
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2011-10-09
      相关资源
      最近更新 更多