【问题标题】:file was built for archive which is not the architecture being linked (i386)文件是为存档而构建的,它不是被链接的体系结构(i386)
【发布时间】:2012-06-03 21:59:44
【问题描述】:

我必须建立静态库。我想在我的 iPhone 和 ipad 应用程序中使用。当我尝试运行模拟器时,我得到链接错误。我是 iOS 开发的新手。请帮忙;

ld:警告:忽略文件 /Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a,文件 是为存档而构建的,它不是被链接的架构 (i386) 架构 i386 的未定义符号:
“_OBJC_CLASS_$_netUtils”,引用自: ViewController.o ld 中的 objc-class-ref:未找到架构 i386 的符号 clang:错误:链接器命令失败,退出代码为 1 (使用 -v 查看调用)

我尝试在架构中添加 i386。但没有运气

【问题讨论】:

    标签: ios iphone xcode ipad linker-errors


    【解决方案1】:

    在解决同样的问题并遵循更新构建设置、清除链接器搜索路径等所有公认的答案之后。我终于找到了一个适合我的答案。

    在构建之前,请确保选择正确的类型(iPhone 模拟器)而不是 iOS 设备。然后重建。否则,您将尝试在您的 mac (i386) 上的模拟器上使用为 iOS 设备(arm 处理器)构建的库。应该很明显,但事实并非如此。

    之前:

    之后:

    现在,查看导航器中的产品组> 右键单击​​您的静态库(.a 文件)> 在 Finder 中显示,您会注意到它位于 Debug-iphonesimulator 文件夹中,而不是 Debug-iphoneos。文件夹名我一开始没注意,要不我早就想到了。

    希望这会有所帮助。

    【讨论】:

    • 这为我解决了。有很多方法可以为您不想要的架构构建,未来的搜索者可能希望查看其中许多答案,看看您是否找到适合您的答案!
    • 更新:在 xcode 5 和 iPhone 64 位模拟器之后,我在为另一种架构构建 libPods.a 时遇到错误,但在其他类型的模拟器中不会发生:\
    • @Nour1991 尝试将Build Settings -> Build Active Architecture Only 设置为No
    • @MMiroslav 我不得不说是,因为我需要在调试中部署。
    【解决方案2】:

    有时这些类型的错误会激怒您!

    删除派生数据对我有用:

    修复步骤

    1) 在 XCODE > Windows > 项目 > 选择你的项目 > 删除派生数据 > 退出 XCODE 并重新打开它 > 如果你得到 MAC-O-Linker 构建失败错误 > 参考 this 链接 > 再次清理并构建。

    【讨论】:

    【解决方案3】:

    您的libnetUtils.a 正在为与您的目标不同的架构构建。

    检查 libnetUtils 构建设置。它所构建的架构及其支持的架构列表必须是目标架构的(弱)超集。这里的复杂性在于,生成的架构分布在各种设置中:“架构”、“仅构建活动架构”和“有效架构”。

    “仅构建活动架构”设置使这特别令人困惑。例如,假设您正在为模拟器构建。如果 Debug 的“Build active architecture only”设置为 NO,它将构建“Architectures”和“Valid architectures”中列出的所有架构(可能是 armv7 等)。但是,如果 libnetUtils 将该设置设置为是(调试:是),则它仅适用于 i386。因此,当您的链接器尝试将 armv7 与 i386 链接时,它会失败。

    【讨论】:

      【解决方案4】:

      如果我收到忽略文件警告 - 我会在忽略的文件上运行 lipo -info 以找到它的架构如下

      lipo -info libnetUtils.a
      

      这将打印 i386、armv6、armv7、armv7s、x86_64 等。通常,该架构必须与您的目标构建平台相匹配。例如

      • i386 = ios 模拟器或 Mac os x 上的 32 位构建
      • armv6 armv7 arm7s = ios 设备
      • x86_64 = 基于 mac os x 的 64 位构建

      根据不匹配情况,您必须为目标平台重建库或更改目标平台。

      注意:对于胖二进制文件,lipo -info 将打印上述架构的组合。

      【讨论】:

      • 虽然,这并没有回答 OP。这是调试此问题的好工具。我想知道的是,您如何使用上述所有架构构建二进制文件?
      • 没关系,我在这里找到了答案:stackoverflow.com/questions/2793392/… 它使用 lipo 使用 '-create' 标志来组合构建
      • ld: 警告:为 iOS-armv7 构建但尝试与为 iOS-arm64 构建的文件链接 架构 armv7 的未定义符号此警告导致 clang:错误:链接器命令失败,退出代码为 1(使用-v 查看调用)这个错误。如果您使用自己的库/框架,请在项目库和采用者中更改它。 Build Settings -> Build Active Architecture Only 到 No
      【解决方案5】:

      我实际上不知道我的建议是否正确,但请尝试检查:

      • 选择您的项目
      • 选择“构建设置”
      • 检查架构:
        • 有效的架构应该是“armv6 armv7”
        • 支持的平台应该是“iphonesimulator iphoneos”(可能是iPad,我不知道)
        • 基础 SDK – 你的 iOS SDK(我有 iOS 5.0)。

      如果我是队长,请不要评判我:)

      【讨论】:

      • 除了 Alexander 的建议之外,我建议您确保将“仅构建活动架构”设置设置为“否”。这让我最近绊倒了。
      【解决方案6】:

      这意味着您尝试使用的库并未针对 iOS 模拟器进行通用编译(i386 符号适用于 Mac)。不过,在实际设备上运行它应该可以正常工作。

      【讨论】:

        【解决方案7】:

        您还应该检查构建设置中的部署目标是否与依赖和依赖相同。我注意到我为静态库目标设置了 iOS 13,而为使用该库的框架定义了 iOS 10.0。切换到 10.0 解决了这个问题。

        【讨论】:

        • 检查了关于这个问题的所有其他建议,这是让我绊倒的一个
        【解决方案8】:

        遇到同样的问题,尝试了页面上的各种解决方案,但无济于事。 我仍然收到一条消息,告诉我我的库不是为 arm64 构建的。

        最后我是如何解决的:

        • 在文本编辑器中为库打开了 project.pbxproj
        • 搜索了 VALID_ARCHS
        • 出现 4 次,其中 2 次不包含 arm64
        • 我在链中手动添加了 arm64 (VALID_ARCHS = "arm64 i386 armv7 armv7s")
        • 重建库,一切正常

        似乎有时 XCode 显示的构建设置不完整,并且与项目文件不完全对应。

        【讨论】:

          【解决方案9】:

          对我来说,将Build Active Architecture Only 设置为Multiple values 是固定的,为此,您必须扩展它并将Debug 设置为YES 并将Release 设置为No。现在,它可以在我的设备上编译。

          【讨论】:

            【解决方案10】:

            当我们在设备上运行应用程序时不会出现此问题。您可以通过在iOS设备上运行代码来检查它。

            【讨论】:

              【解决方案11】:

              我也有一个 armv7s 架构。我删除了它并确保 armv6 和 armv7 是唯一列出的两个。现在可以使用了

              【讨论】:

              • 你不应该排除 armv7s
              猜你喜欢
              • 2011-12-13
              • 1970-01-01
              • 2011-04-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-15
              相关资源
              最近更新 更多