架构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的未定义符号?这个错误是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章