使用Facebook SDK构建项目时出现链接错误

3

我刚刚从Github上加入了最新版的Facebook SDK代码到我的项目中。由于我使用ARC,所以我使用他们提供的shell脚本来构建静态库。我将其添加到我的项目中并确保静态库已被链接,但是我收到了以下链接错误:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_FBFrictionlessRequestSettings", referenced from:
      objc-class-ref in libfacebook_ios_sdk.a(Facebook.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是链接器设置: 应用程序链接器设置 有什么想法吗?
6个回答

2
最新版本的Facebook SDK似乎有一些改动,导致ARC构建(静态库)出现问题。静态库可以正常构建,但是在我的项目中使用时出现了链接器错误。我为解决这个问题所做的是回退到之前的Facebook sdk版本,这样链接器错误就消失了。
请参见https://github.com/facebook/facebook-ios-sdk/commits/master 我使用的是2月24日提交的版本(不是2月25日,抱歉Jason Clark!)

https://github.com/facebook/facebook-ios-sdk/tree/9acf74345bb248d698966eac9a3057a4b4be1b0f


你说得对。如果我看了提交历史记录,我可能会做同样的事情——夜深了。谢谢! - Jesse Bunch
我仍然得到相同的错误……你能否更具体地说明一下? 我要使用什么 #import 命令? 我是导入所有的“.h”文件还是只有一个“.a”文件? - Noam

2
2月25日的提交中,FBFrictionlessRequestSettings.m在xcode项目中缺失,因此尽管有头文件,但它不包含在静态链接库中。
1. 克隆最新的存储库,在本帖发布时,最新的提交是:https://github.com/facebook/facebook-ios-sdk/commit/4e3567c40e3b7f8156a82f18e5a2f5cd18e077eb 2. 打开src目录下的xcode项目facebook-ios-sdk.xcodeproj
3. 在FBConnect下添加FBFrictionlessRequestSettings.m
4. 使用项目导航器,确保FBFrictionlessRequestSettings.m在编译源下列出
5. 保存并关闭xcode项目
6. 运行scripts/build_facebook_ios_sdk_static_lib.sh以构建最新的静态链接库,并按照安装说明进行操作,您应该能够编译和链接您的项目,而不会出现任何问题。
更好的方法是,克隆此存储库并构建它。 https://github.com/alvarezm50/facebook-ios-sdk

1

我已经尝试了这个过程并且成功修复了它。

选择您的项目目标 -> 构建阶段 -> 编译源代码,将Facebook静态库和JSON静态库中的所有.m文件添加进去。 现在如果您运行应用程序,它不会抛出任何链接器错误。


1

在构建您的fb-ios-sdk时似乎出了一些问题...所有内容都是最新的,在构建静态库时没有错误吗?

我没有问题在模拟器或我的iOS5设备上获取SDK的最新版本。

这是我所做的(OS X 10.7.3,Xcode 4.2.1,iOS5 ARC)

  • 获取最新的源文件:https://github.com/facebook/facebook-ios-sdk/zipball/master
  • 解压文件并构建:cd ~/facebook-ios-sdk/scripts/ && ./build_facebook_ios_sdk_static_lib.sh
  • 现在获取~/facebook-ios-sdk/lib/中的facebook-ios-sdk文件夹,将其放入您的Xcode项目文件夹中,如下所示:http://cl.ly/1X3B203f272z2l0w2t39 并在Xcode中链接到libfacebook_ios_sdk.a
  • ${SOURCE_ROOT}/facebook-ios-sdk添加到您的Header Search Paths

我尝试这样做,但它告诉我无法执行以下行: "#import "FBConnect.h"。此外,如果我尝试将facebook-ios-sdk文件夹中的所有.h文件复制到我的项目中,它会给我返回以下错误: Undefined symbols for architecture i386: "OBJC_CLASS$_FBFrictionlessRequestSettings", referenced from: objc-class-ref in libfacebook_ios_sdk.a(Facebook.o) ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation) - Noam
“link against libfacebook_ios_sdk.a” 是什么意思? - Noam
选择您的活动目标,然后选择“Build Phases”->“Link Binary With Libraries”->“+”->“Add other…”并选择libfacebook_ios_sdk.a - dom

0

我曾经遇到过同样的问题。结果发现这是相当微不足道的。我确实使用XCode对git的支持,但更喜欢使用命令行。然而,这意味着每次从git拉取时,我需要确保添加任何新文件并删除所有已删除的文件。在这种情况下,FBFrictionlessRequestSettings.* 就派上用场了。

文件->将文件添加到“我的项目”


0

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