架构为armv7的未定义符号:"_SCNetworkReachabilityCreateWithAddress"

10

这个问题真的让我头疼,我已经看了两天了,但似乎无法解决。下面是我收到的错误信息:

Undefined symbols for architecture armv7:
"_SCNetworkReachabilityCreateWithAddress", referenced from:
  +[Reachability reachabilityWithAddress:] in Reachability.o
"_SCNetworkReachabilityCreateWithName", referenced from:
  +[Reachability reachabilityWithHostName:] in Reachability.o
"_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:
  -[Reachability stopNotifier] in Reachability.o
"_SCNetworkReachabilityScheduleWithRunLoop", referenced from:
  -[Reachability startNotifier] in Reachability.o
"_SCNetworkReachabilitySetCallback", referenced from:
  -[Reachability startNotifier] in Reachability.o
"_SCNetworkReachabilityGetFlags", referenced from:
  -[Reachability connectionRequired] in Reachability.o
  -[Reachability currentReachabilityStatus] in Reachability.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我已添加了SystemConfiguration.framework,但似乎它并不想与之一起使用,因为这个错误就是消失不了。我看了很多同样的问题,但很多都没有确认答案。这种情况在周末时发生的,期间没有人碰过它。有谁能帮忙吗?

编辑 忘记添加这部分内容。

  

ld:警告:忽略文件/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks//SystemConfiguration.framework/SystemConfiguration,文件中缺少所需的体系结构armv7

编辑

感谢@gaige,我找到了一个问题;在SystemConfiguration.framework之前有一个多余的斜杠,不应该出现。我已经删除并重新添加框架,但没有帮助。如何删除这个多余的斜杠呢?


1
UNIX系统通常不会因为多了一个斜杠而发生故障。我猜这是可能的。你能确认一下所提到的文件是否确实具有两个体系结构吗?运行 lipo -info /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks//SystemConfiguration.framework/SystemConfiguration - Nate
1
如果您担心多余的斜杠,请在文本编辑器中打开您的project.pbxproj文件,并查找包含框架路径的行,例如:name = SystemConfiguration.framework; path = System/Library/ ... - Nate
1
那个路径对我来说也不熟悉。当我使用 SystemConfiguration.framework 创建项目时,它会使用这里的路径:/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/SystemConfiguration.framework。我实际上尝试删除了 /Applications/Xcode.app 下的文件,然后重新构建,结果它完美地工作了。所以,我不确定你为什么要使用那个文件。如果是因为你明确添加了这个框架到你的项目中,请问具体是怎样添加的呢? - Nate
1
好的,那看起来不对。你想要看到这个:fat文件中的架构:SystemConfiguration是:armv6 armv7 - Nate
1
那么,我的后续问题是“你是如何在Xcode中添加那个框架的?”当你选择它时,也许你手动导航到了/Applications/Xcode.app下的那个位置? - Nate
显示剩余6条评论
3个回答

8

通常情况下,额外的斜杠不会妨碍类UNIX系统的构建过程。

但是,请确保 armv7 架构在您构建所试图使用的框架文件内。为此,请在命令行中使用 lipo -info 命令:

lipo -info /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer‌​/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks//SystemConfiguration.framework/Sy‌​stemConfiguration

您应该能看到以下输出结果:
Architectures in the fat file: SystemConfiguration are: armv6 armv7

如果你没有这样做,那么你的项目可能已经链接到了错误版本的SystemConfiguration.framework。在你的机器上有多个版本的该框架。因此,我建议验证你在项目中使用的框架路径(即SystemConfiguration)。通常情况下,我期望该文件应该像这样(根据你使用的操作系统版本进行调整):
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Lib‌​rary/Frameworks/SystemConfiguration.framework

非常感谢,这真的很有帮助,我希望它也能帮助其他人。 - Popeye

0

我只是清理了一下并重新启动了Xcode,就解决了问题。


0

我有一个Cordova项目和org.apache.cordova.network-information插件的问题已经持续了大约8个小时。通过上面的答案和其他几个答案,我被鼓励在Xcode的Project > Target > Build Phases > Link Binary with Libraries部分进行搜索,这是正确的。

但是尽管SCNetworkReachabilityCreateWithAddressSystemConfigration.framework中定义,我仍然无法通过系统地添加和删除此库和其他库来摆脱链接器错误。

最后,我创建了一个新项目,并像原始项目一样精确地复制了框架组合。现在它可以工作了。

结论:

  • 如果可能的话,请创建一个新项目并从中复制必要的扩展,它可能会有所帮助。
  • 有时候,一个库包含得太多了,所以取消选中它。有时候情况正好相反。
  • 为了深入挖掘,请检查上面优秀答案中描述的SystemConfiguration.framework。它可能与目标体系结构不匹配。此外,请检查build包含路径中的奇怪字符。

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