架构armv7的未定义符号?这个错误是什么意思?

时间:2011-12-27 21:16:44

标签: iphone objective-c cocoaasyncsocket

我只是将所有CocoaAsyncSocket代码标记为非ARC代码,并且它给了我这3个错误:

Undefined symbols for architecture armv7:
  "_kCFStreamNetworkServiceTypeVoIP", referenced from:
      -[GCDAsyncSocket enableBackgroundingOnSocketWithCaveat:] in GCDAsyncSocket.o
  "_kCFStreamNetworkServiceType", referenced from:
      -[GCDAsyncSocket enableBackgroundingOnSocketWithCaveat:] in GCDAsyncSocket.o
  "_kCFStreamPropertySSLSettings", referenced from:
      -[GCDAsyncSocket maybeStartTLS] in GCDAsyncSocket.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

有人知道这意味着什么以及如何解决它?

3 个答案:

答案 0 :(得分:16)

我认为我通过查看代码评论找到了解决方案,但我现在看到它也是Mark Adams在上面提出的建议。我有错误,直到我在目标 - >构建阶段 - > Link Binary With Libraries - > Select CFNetwork.framework

下添加了CFNetwork.framework

答案 1 :(得分:4)

这意味着您正在编译的某些代码引用了常量“kCFStreamNetworkServiceTypeVoIP”,“kCFStreamNetworkServiceType”和“kCFStreamPropertySSLSettings”,但是当它尝试将您的代码与它使用的库链接时,找不到这些常量。 / p>

不幸的是,这可能有很多原因:

  • 你可能拼错了他们
  • 他们可能是#ifdef出来的那个架构
  • 您可能没有链接正确的图书馆(y,ies)
  • 可以将它们标记为具有“隐藏”可见性,以便它们只能在声明库中使用
  • 可能是其他原因

您可以使用'nm'来搜索库中二进制文件的导出符号,使用'otool -L'来检查二进制文件链接的库。

答案 2 :(得分:0)

将LineaPro API集成到应用程序时,我遇到了同样的错误。

我实施的修复程序是将ExternalAccessory.framework添加到General - >链接框架和库。

我已经包含了CFNetwork.framework。