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

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)

有人知道这是什么意思以及该如何修复吗?

7
你是否正在链接CFNetwork库? - Mark Adams
3个回答

16

我认为我找到了解决方法,通过查看代码注释,但我现在看到这也是马克·亚当斯上面建议的。 在Targets->Build Phases->Link Binary With Libraries->Select CFNetwork.framework下添加CFNetwork.framework之前,我遇到了错误。


@DuneCat,这真的很有帮助。作为 iOS 初学者,我不知道需要手动添加框架。我错以为所有东西都已经包含了。链接框架和库 -> 点击加号 -> 添加框架,对我来说行得通。我在 C# 中也犯过类似的错误,但是 Visual Studio 会通知你。 我想……无论如何感谢您。 - Martin Berger
我在OS X 10.9中遇到了错误,通过包含CFNetwork.Framework得以解决。 - Joe M

4
这表示你正在编译的一些代码引用了常量“kCFStreamNetworkServiceTypeVoIP”、“kCFStreamNetworkServiceType”和“kCFStreamPropertySSLSettings”,但在尝试将你的代码与其使用的库链接时未找到这些常量。
不幸的是,有许多原因可以导致这种情况:
- 可能拼写错误。 - 可能对该架构进行了 #ifdef 处理。 - 可能没有链接正确的库。 - 可能被标记为具有“隐藏”可见性,因此只能在声明库中使用。 - 可能还有其他原因。
你可以使用“nm”来查看库二进制文件中导出的符号,并使用“otool -L”来检查你的二进制文件链接的库。

0

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

我实施的解决方法是将ExternalAccessory.framework添加到“通用” -> “链接的框架和库”中。

我已经包含了CFNetwork.framework。


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