体系结构i386链接的命令退出代码1的未定义符号



我在为模拟器构建时遇到这个错误:

Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_SA_OAuthTwitterEngine", referenced from:
      objc-class-ref in NetworkUpdateViewController.o
  "_OBJC_CLASS_$_SA_OAuthTwitterController", referenced from:
      objc-class-ref in NetworkUpdateViewController.o
  "_OBJC_CLASS_$_MGTwitterEngine", referenced from:
      objc-class-ref in TwitterLoginViewController.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是为本地设备(iPad)构建时的一个:

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

尝试了我能想到的一切。。。你能帮我吗?

Clang非常擅长将错误放在人类可读的纯文本中,只是我们有时会着眼于大局而放弃。看这里:

"_OBJC_CLASS_$_SA_OAuthTwitterController"

现在去掉标准的_OBJC_CLASS_$部分,你会得到什么?CCD_ 1。

现在,第二部分:

... referenced from:
  objc-class-ref in NetworkUpdateViewController.o
   "_OBJC_CLASS_$_SA_OAuthTwitterEngine", referenced from:
  objc-class-ref in NetworkUpdateViewController.o
  "_OBJC_CLASS_$_MGTwitterEngine", referenced from:
  objc-class-ref in TwitterLoginViewController.o

显然,您引用的是这个不存在的头,位于名为>:NetworkUpdateViewControllerTwitterLoginView的类中。

现在,出现了两种可能性:要么是你没有将正确的文件添加到"编译源"列表中,要么是你碰巧使用了一个不是为iOS模拟器(架构i386)构建的框架(或通用库,通常称之为通用库)。在第一种情况下,找到有问题的实现文件,并将它们拖到"编译源"列表中,然后构建并运行。如果情况是第二种,那么您必须在设备上进行测试,或者尝试将lib重新编译为可用的通用库,这比听起来更难。