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

Posted

技术标签:

【中文标题】架构armv7的未定义符号?这个错误是啥意思?【英文标题】:Undefined symbols for architecture armv7? What does this error mean?架构armv7的未定义符号?这个错误是什么意思? 【发布时间】:2011-12-27 21:16:43 【问题描述】:

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

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

【问题讨论】:

你链接到CFNetwork了吗? 【参考方案1】:

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

【讨论】:

@DuneCat 这有帮助。作为 ios noob,我不知道您需要手动添加框架。我以某种方式猜测所有内容都已包含在内。链接的框架和库 -> 单击加号 -> 添加框架对我有用。我在 C# 中遇到过同样类型的错误,但 Visual Studio 会通知您。我想......无论如何,谢谢。 我在 OS X 10.9 中遇到了错误,并通过包含 CFNetwork.Framework 得到了解决。【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

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

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

我已经包含了 CFNetwork.framework。

【讨论】:

以上是关于架构armv7的未定义符号?这个错误是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

静态库链接错误。架构 armv7s 的未定义符号

XCode - 架构 armv7 arm64 的未定义符号

编译时错误“架构 x86_64 的未定义符号”是啥意思?

XCode 5 - 架构 armv7 的未定义符号:

架构 armv7 (WebRTC) 的未定义符号

架构 armv7 (WebRTC) 的未定义符号