【问题标题】:File is universal (three slices), but it does not contain a(n) ARMv7-s slice error for static libraries on iOS, anyway to bypass?文件是通用的(三个切片),但它不包含 iOS 上静态库的(n)ARMv7-s 切片错误,无论如何要绕过?
【发布时间】:2012-09-06 07:04:37
【问题描述】:

我升级了Xcode 版本,在使用外部静态库时,我收到以下消息:

ld:文件是通用的(3 个切片)但不包含 a(n) armv7s 切片:架构 armv7s 的 /file/location clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

如果库的开发者还没有更新他们的库,有没有办法绕过这个并添加对库的支持?

【问题讨论】:

标签: ios objective-c xcode ios6 static-libraries


【解决方案1】:

万一这发生在某人身上。我建立了自己的库以与第三方代码一起使用。当我构建它以交付时,我不小心将我的 iPhone 4S 插入了电源,因此 Xcode 仅为插入的架构构建了我的库,而不是遵循项目设置。删除所有插入的设备并重建库,链接它,你应该没事。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    使用菜单项目 -> 构建设置 ->

    然后从“有效架构”中删除 armv7s。 如果选择了标准,则将其删除,然后添加 armv7。

    【讨论】:

      【解决方案3】:

      就我而言,我正在链接到一个有点旧的第三方库(为 iOS 6 开发,在 XCode 5 / iOS 7 上)。因此,我不得不更新第三方库,进行清理和构建,现在它构建成功了。

      【讨论】:

        【解决方案4】:

        我只是在目标的构建设置中将“仅构建活动架构”切换为“是”,现在可以了!

        【讨论】:

        • @Blasco73 你知道你很厉害吗?你应该。来了,先生,太棒了!
        • 这怎么可能是一个好的解决方案。它消除了错误,但您只能为当前的拱门构建,而不是市场上的所有...
        【解决方案5】:

        如果您想删除对任何架构的支持,例如 ARMv7-s 在您的情况下,请使用菜单 Project -> Build Settings -> 删除架构来自“有效架构”。

        在库更新之前,您可以将其用作临时解决方案。您必须从主项目中删除架构,而不是从库中。

        或者,您可以将调试配置的“仅构建活动架构”的标志设置为“是”。将发布配置的“仅构建活动架构”保留为否,以便在发布之前收到提醒,提醒您应该升级正在使用的任何第三方库。

        【讨论】:

        • 您不必重新编译库。您可以从正在使用该库的项目中删除此标志。
        • 它会工作,因为没有使用 armv7s 支持编译的旧应用程序也必须运行。但是你会失去一些特定的优化。无论如何,这应该是一个临时的解决方法。
        • Dropbox 框架已针对此问题进行了更新,请参阅 forums.dropbox.com/topic.php?id=90014
        • 从有效架构列表中删除 armv7s 对我有用,但是从架构中删除它也是如此。然而,在这两种情况下,我都会从链接器中获得No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).,我只能通过将i386 添加到有效架构列表来解决。
        • 不,armv7s 是 iPhone 5 使用的 A6 处理器的指令集。由于 A6 向后兼容,它仍然会运行 armv7 指令集。
        【解决方案6】:

        Flurry 支持 iPhone 5 (ARMv7s) 正如我在昨天的帖子中提到的,Flurry 在周三发布消息后立即开始开发 iOS SDK 版本以支持新 iPhone 5 中的 ARMv7s 处理器。

        我很高兴地告诉您,工作已经完成,SDK 现在可以在网站上使用。

        【讨论】:

          【解决方案7】:

          尝试从项目的“有效架构”中删除 armv7s 以从 iOS 5.1 手机的此问题中发布

          【讨论】:

            【解决方案8】:

            我刚刚发布了一个修复 here,它也适用于这种情况 - 基本上,您在外部库中执行十六进制查找和替换,使其认为它是 ARMv7s 代码。您应该可以使用 lipo 将其分解为 3 个静态库,复制/修改 ARMv7 的一个,然后再次使用 lipo 为所有 4 个架构组装一个新库。

            【讨论】:

              猜你喜欢
              • 2015-07-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多