5

我刚刚将我所有的 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)

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

4

3 回答 3

16

我想我通过查看代码注释找到了解决方案,但我现在看到这也是 Mark Adams 上面所建议的。在我在 Targets->Build Phases->Link Binary With Libraries->Select CFNetwork.framework 下添加 CFNetwork.framework 之前,我遇到了错误

于 2012-01-24T13:38:05.227 回答
4

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

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

  • 你可能拼错了
  • 他们可能会因该架构而被#ifdef 淘汰
  • 您可能没有链接正确的库(y,ies)
  • 它们可以被标记为具有“隐藏”可见性,以便它们只能在声明库中使用
  • 可能还有其他原因

您可以使用“nm”从库的二进制文件中查看导出的符号,并使用“otool -L”检查您的二进制文件正在链接哪些库。

于 2011-12-27T21:32:49.580 回答
0

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

我实施的修复是将 ExternalAccessory.framework 添加到 General -> Linked Framework and Libraries。

我已经包含了 CFNetwork.framework。

于 2014-09-07T04:22:26.527 回答