【问题标题】:Undefined symbols for architecture armv7: "_SCNetworkReachabilityCreateWithAddress"架构 armv7 的未定义符号:“_SCNetworkReachabilityCreateWithAddress”
【发布时间】:2012-06-11 09:50:03
【问题描述】:

是的,这已经成为一个正确的痛苦我已经看了 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 之前有一个额外的斜线,不应该存在。我已删除框架并重新添加,但没有帮助。如何删除这个多余的斜线?

【问题讨论】:

  • UNIX 系统通常不会因为额外的斜线而失败。我想这是可能的。你能验证有问题的文件确实有这两种架构吗?运行lipo -info /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks//SystemConfiguration.framework/SystemConfiguration
  • 如果您担心多余的斜线,您可以在文本编辑器中打开您的 project.pbxproj 文件,并查找包含框架路径的行吗?像这样的东西:name = SystemConfiguration.framework; path = System/Library/ ...
  • 这条路径对我来说也不熟悉。当我使用 SystemConfiguration.framework 创建一个项目时,它在这里使用一个:/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/SystemConfiguration.framework。我实际上尝试删除/Applications/Xcode.app下的文件,然后重建,它工作正常。所以,我不确定你为什么要使用那个文件。您是否明确地将框架添加到您的项目中?如果有,怎么做?
  • 好吧,看起来不对。你想看这个:Architectures in the fat file: SystemConfiguration are: armv6 armv7
  • 所以,现在我的后续又是“你是如何在 Xcode 中添加该框架的?”。当你选择它时,也许你手动导航到 /Applications/Xcode.app 下的那个位置?

标签: iphone ios objective-c xcode frameworks


【解决方案1】:

通常,额外的斜线不会破坏类似 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

【讨论】:

  • 非常感谢这确实有帮助,我希望它会在未来对其他人有所帮助。
【解决方案2】:

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

但是尽管SCNetworkReachabilityCreateWithAddress 是在SystemConfigration.framework 中定义的,但我无法通过系统地添加和删除这个库和其他库来摆脱链接器错误。

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

结论:

  • 如果可能,创建一个具有必要扩展的新项目并从中复制星座。这可能会有所帮助。
  • 有时,包含的库太多,因此请取消选中它。有时情况正好相反。
  • 要深入挖掘,请检查SystemConfiguration.framework,如上面出色答案中所述。它可能与目标架构不匹配。此外,检查构建中的奇怪字符,包括路径。

【讨论】:

    【解决方案3】:

    我只是清理并重新启动了 xcode,它就可以工作了。

    【讨论】:

      猜你喜欢
      • 2016-04-29
      • 2011-09-19
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多