架构armv7的未定义符号:“_SCNetworkReachabilityCreateWithAddress”

时间:2012-06-07 10:38:23

标签: iphone ios objective-c xcode frameworks

这已成为一种正确的痛苦,我已经看了2天了,似乎无法解决它。这是我得到的错误。

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之前有一个额外的斜杠,它不应该存在。我删除了框架并重新添加,但没有帮助。如何删除这个额外的斜杠?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

但是虽然SCNetworkReachabilityCreateWithAddress中定义了SystemConfigration.framework,但我无法通过系统地添加和删除此库和其他库来消除链接器错误。

最后,我使用插件创建了一个新项目,并完全按原样复制了框架星座。现在它正在运作。

结论:

  • 如果可能,创建一个具有必要扩展名的新项目,并从中复制星座。这可能有所帮助。
  • 有时,库中包含的内容太多,因此请取消选中。有时它反过来了。
  • 要深入挖掘,请按照上面的优秀答案中的说明检查SystemConfiguration.framework。它可能与目标架构不匹配。此外,检查构建中包含路径的奇怪字符。

答案 2 :(得分:0)

我只是清理并重新启动了xcode,它就起作用了。