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

And*_*rew 5 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)
Run Code Online (Sandbox Code Playgroud)

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

Dun*_*Cat 16

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

  • 这是正确答案,缺少CFNetwork.framework (2认同)

Cat*_*Man 4

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

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

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

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