【问题标题】:iOS - Linker error after upgrading to Xcode 4.5, possibly Core Plot relatediOS - 升级到 Xcode 4.5 后出现链接器错误,可能与 Core Plot 相关
【发布时间】:2012-09-06 19:48:21
【问题描述】:

我刚刚升级到Xcode 4.5GM,并在我的 iPhone 项目中整理了一些屏幕,以应对 iPhone 5 上的额外屏幕尺寸。该项目的目标是iOS 5.1,我只是来为我的电话,我收到此链接器错误:

文件是通用的(2 个切片)但不包含 a(n) armv7s 切片: /Users/JonathanW/Documents/MyXcode/myApp/myApp/CorePlot/libCorePlot-CocoaTouch.a 对于架构 armv7s

我在我的项目中使用Core Plot 1.0 静态库,直到现在还没有遇到任何问题。环顾四周,我可以看到与构建体系结构设置有关的类似错误,但不知道从哪里开始。该项目在模拟器中运行良好(iOS 5.1 和iOS 6)。有什么想法吗?

【问题讨论】:

  • 您是否进行了清理和重建?还要检查架构中是否有 armv6 和 armv7。您可能需要重新编译目标并将库重新添加到目标
  • 抱歉应该说是的,我已经完成了所有通常的全面清理、删除派生数据、重建等工作。我什至完全重新安装了 Xcode。

标签: iphone ios xcode linker core-plot


【解决方案1】:

从外观上看,您需要使用 Xcode 4.5GM 重建 libCorePlot 库,以便有一个 ARMV7S 构建的库。似乎它正在尝试使用您使用旧 Xcode 构建的版本。

【讨论】:

  • 这解决了我在更新到 Xcode 4.5GM 后看到的与 AFNetworking 相同的问题
  • @Ben 你如何重建 libCorePlot 库?
  • 非常感谢 Ben,您的回答很准确。使用 Xcode 4.5 重新编译 Core Plot 库更具挑战性,但最终还是成功了! @Jamie - 我在这里修复了 Core Plot 的一些代码:code.google.com/p/core-plot/issues/detail?id=442 我希望他们会在 iOS6 发布后发布另一个主版本。
  • ...这就是为什么我们建议人们使用存储库中的最新代码:code.google.com/p/core-plot/source/checkout 而不是二进制快照。请按照此处的相关项目说明进行操作:code.google.com/p/core-plot/wiki/UsingCorePlotInApplications,这应该可以与新架构一起构建。
  • 要添加的一点是,您需要进入 Core Plot 项目,进入 Build Active Architecture Only 构建设置,然后将 Debug 和 Release 构建都更改为 No。结合从最新的存储库源编译,这可以清除您可能看到的任何 armv7s 链接器错误。
【解决方案2】:

我还在我的项目中使用 Core Plot 1.0 静态库。我可以通过将 Build Active Architectures Only 设置为 Yes 来解决这个问题。 Build Active Architectures Only 位于 Xcode 中 Target 的 Build Settings 的 Architecture 部分。

我下载了似乎不完整的 Core Plot 1.0 zip 文件,因此我无法重建库。

【讨论】:

  • 完美运行!!
【解决方案3】:

它可以在模拟器中运行,因为模拟器将始终使用 i386 架构。新的 SDK 并没有改变这一点。改变的是 iPhone 5 的出现,它使用了新的架构 (armv7s)。您的应用程序的项目自动将 armv7s 添加为有效架构,但该库可能是在不知情的情况下编译的。因此,您启用 arm7s 的应用程序会尝试链接在没有 armv7s 的情况下构建的库并失败。

要修复它,您只需要访问生成库的项目即可。修改目标上的“有效架构”设置以包含 armv7s,然后重新构建。

【讨论】:

  • 非常感谢马特,您的回答很准确。我已经接受了 Ben 最初的回答。
【解决方案4】:

我已经为此苦苦挣扎了好几天,终于通过创建一个新的静态库成功地让它工作了。

我通过此处的说明使用 Mercurial 源代码控制系统:Create a static library using Mecurial 和此处找到的 wiki 中的“Core-Plot 静态库安装”:How to do a Static Library Install of Core-Plot

我是为像我这样经验不足的人发布此内容的,因为这很简单并且可以自我解释。

【讨论】:

    【解决方案5】:

    您是否进行了清理和重建?还要检查架构中是否有 armv6 和 armv7。您可能需要重新编译目标并将库重新添加到目标

    【讨论】:

      【解决方案6】:

      将 CorePlot 项目上的编译器从 Apple LLVM Compiler 4.1 切换到 LLVM GCC 4.2

      【讨论】:

      • 不,这不是推荐的做法。获取最新的存储库代码并在此基础上进行构建。
      【解决方案7】:

      我只是编译了 core-plot 库,并从这个链接 http://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications
      安装了依赖项目 每件事都像魅力一样(我的项目现在支持 armv7 和 armv7s 没有任何问题),此外我仍然将 Build Active Architecture Only 设置为 NO ,以确保支持所有架构

      【讨论】:

        【解决方案8】:

        您只需从有效架构列表中删除 armv7s。

        只需执行以下操作。 - 从项目导航器中选择您的项目 - 从目标列表中选择您的目标 -选择构建设置选项卡 - 找到“有效架构”设置。它应该说 armv7 armv7s。 删除 armv7s,您的有效架构中将只有 armv7。 现在您的项目将正确编译。

        【讨论】:

          【解决方案9】:

          修复使用 Xcode 5 时 Core Plot 的链接器错误

          我多年来一直在使用 Core Plot,并且收到一堆关于 armv7s 不支持更新的“CorePlotHeader”文件夹中的某些文件的“Apple Mach-O 链接器警告”错误(当前在我的项目中删除的文件夹和将新文件夹拖到我的项目中)以反映 CorePlot_1.4 的更改。我还删除了旧的“libCorePlot-CocoaTouch.a”库并将其放入我的 Frameworks 文件夹中。在模拟器中一切正常,但我无法在装有 iOS 7.0.2 的 iPad 4 上构建。

          这是我发现的唯一在调试时有效的东西(在存档等时似乎有效):

          1) 执行我上面提到的所有操作,将 Build Active Architectures 设置为 No,然后清理

          2) 您可能会收到有关不支持架构“arm64”的错误,因此请从构建设置中的“有效架构”部分中删除“arm64”

          3) 调试时右键单击 Products 文件夹中的“MyApp.app”文件,您可能会看到旧的“libCorePlot-CocoaTouch.a”(如果修改日期早于 2013 年 9 月 28 日)编译你的应用程序。

          4) 删除该库并将新库复制到构建文件夹中,清理然后重建

          这适用于“静态库安装”方法,尚未使用“依赖项目安装”方法进行测试

          【讨论】:

            【解决方案10】:

            我在 Xcode 4.4 中使用适用于 iOS 6.1 的 Core Plot 1.0 静态库。使用 iOS 7.0 更新到 Xcode 4.5 后,我遇到了与您相同的问题。

            为了修复它,我删除了项目中的 CorePlotHeaders 文件夹和 libCorePlot-CocoaTouch.a。如果您在 Xcode 中将其删除,请选择“移至垃圾箱”选项。

            然后我从https://code.google.com/p/core-plot/downloads/list下载CorePlot_1.4.zip,然后我从https://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications关注静态库安装

            希望对你有帮助

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-07-22
              • 2013-11-07
              • 2012-12-11
              相关资源
              最近更新 更多