【问题标题】:Xcode 7 warnings: object file was built for newer iOS version than being linkedXcode 7 警告:目标文件是为比链接更新的 iOS 版本构建的
【发布时间】:2015-10-28 21:38:18
【问题描述】:

我最近将 Google Cloud Messaging 集成到了一个针对 iOS 7 和 iOS 8 的应用程序中。刚刚下载了 Xcode 7 beta 4 以开始支持 iOS 9,现在我从链接器中收到一个错误:

ld: warning: object file (.../Pods/GoogleInterchangeUtilities/Libraries
/libProtocolBuffers.a(Descriptor.pb.o)) was built for newer iOS version (8.3)
than being linked (7.0)

对于 libProtocolBuffers.a 的部分内容,还有一些类似的。

这是否意味着需要 iOS 8.3 才能使用 GCM 库?如果是这样,为什么 Xcode 6 会愉快地吐出代码(在我使用 iOS 7 设备进行的测试中)毫无问题地向 iOS 7.3 发送推送通知?

鉴于它们只是警告,我仍然可以正常编译,但我不希望发布错误的代码。

编辑:我给谷歌发了邮件,他们说高层会调查。同时,如果您正在阅读本文并且对警告感到困扰,也许还可以发送电子邮件,以便我们鼓励他们处理它。

【问题讨论】:

    标签: ios objective-c xcode7 xcode7-beta4


    【解决方案1】:

    targets/Build Settings/Linking/Other Linker Flags,添加

    -w

    为我消除警告。

    【讨论】:

    • 感谢您的信息。这个答案为我点击了!
    • 你不应该忽略这些警告,它们的存在是有原因的。
    【解决方案2】:

    就我而言,原因是我刚刚更新了pods,然后将deployment target 更改为低于之前的水平并收到了这样的警告。再次运行pod update 即可解决问题。

    【讨论】:

      【解决方案3】:

      仅供参考,相关 pod 的最新版本似乎已修复此问题。

      具体来说,似乎是将 GoogleInterchangeUtilities 从 1.0.0 升级到 1.1.0 才成功。

      如果您看到这个,“pod 更新”应该会让一切变得更好!

      【讨论】:

      • 这解决了我在 Xcode 7.3、Cocoapods 0.39.0 中的警告。谢谢!
      【解决方案4】:

      我的解决方法:

      1. 检查“部署目标”是否等于 Podfile“平台”
      2. 删除 DerivedData (/Users/yourUser/Library/Developer/Xcode)
      3. Pod 安装(终端)
      4. 清理/构建项目

      附:如果需要,可以添加更多信息。

      【讨论】:

      • 你救了我的命,伙计!这应该是公认的答案。
      【解决方案5】:

      这只是意味着 GCM 所依赖的库之一(此处为协议缓冲区)是为 8.3 构建的,尽管它与 GCM 的 min sdk 版本(即 7.0)兼容。 XCode 7 更加严重,并将其报告为警告,但它始终存在,只是以前的版本没有报告。

      总的来说,这只是无害的,一切都应该正常。此外,除非 Google 通过使用 min sdk 版本(7.0)构建所有依赖项来修补 GCM,否则您也无能为力。

      【讨论】:

      • 如果不管它是为哪个版本构建的,它都可以工作,那么链接器的警告有什么意义?
      • 嗯,这是一个有效的警告,因为如果您正在构建一个库,您可能会在不经意间犯下这个错误,并且不会意识到这一点,除非有一天某天突然出现问题。 XCode 只是让开发人员知道他很可能应该针对最小支持的 SDK 构建他的依赖项之一。
      • @evanescent 那么如何针对正确的 SDK 构建 pod? 9.0以外无法选择
      • @purrrminator 您应该仍然可以使用 Pod。由于 Pod 是以这种方式构建的,因此您无能为力。除非 Google 提供一个新的 pod 版本来解决这个问题,否则我们将不得不接受警告。
      • 该警告仅在 GCM 的上下文中是无害的,因为我已经与 Google 人员确认该库实际上向后兼容到 iOS 7.0。它只是使用错误的min_ios_version 构建的,Google 已确认他们将在下一个版本中修复该警告。
      【解决方案6】:

      这实际上意味着所包含库的最小部署目标是 8.3,并且将其与更低的最小部署目标链接会产生此警告。

      在这种情况下,库不正式支持低于 8.3 的目标。虽然将此库链接到具有 ower Minimum Deployment Target 的目标仍然有效,但它可能会在运行时产生崩溃(如果有任何仅 8.3 的代码)在运行早于 8.3 的系统的设备上执行。

      开发人员将 8.3 设置为最低目标是有原因的,并且此警告不应被忽略。在这种情况下它可能是无害的,但在其他情况下它不一定是无害的!

      要修复这些警告,请使用旧版本的库或将最低部署目标设置为 8.3。

      【讨论】:

      • Google 表示导致此问题的 GCM 版本支持 iOS7 或更高版本。也许抛出警告的库实际上并没有被 GCM 使用?那么为什么包含...我希望它只是开源的
      猜你喜欢
      • 1970-01-01
      • 2017-08-30
      • 2015-12-16
      • 1970-01-01
      • 2022-07-14
      • 2022-07-02
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      相关资源
      最近更新 更多