【问题标题】:Error: "File was built for archive which is not the architecture being linked (armv7s)"错误:“文件是为存档而构建的,它不是被链接的架构(armv7s)”
【发布时间】:2023-03-15 02:23:01
【问题描述】:

我已经构建了自己的静态 C++ 库,它是使用设置构建的:

  • 架构:armv7、armv7s
  • 仅构建活动架构:否
  • 支持平台:iOS
  • 有效架构:armv7、armv7s

库项目构建良好,我得到了 .a 文件(我已清理构建文件夹并再次构建项目以确保我的设置有效)。

我已将库(.a 文件)添加到我的 iOS 项目中,但即使我在 iOS 项目上设置了完全相同的设置,该项目也不会构建:

  • 架构:armv7s、armv7
  • 仅构建活动架构:是
  • 支持平台:iOS
  • 有效架构:armv7、armv7s

我不断收到此错误:

ld:警告:忽略文件 /Users/hidden/Library/Developer/Xcode/DerivedData/HelloWorldCppLib-fomvvtklwijvqicyhahxleiscein/Build/Products/Debug-iphoneos/libHelloWorldCppLib.a,文件是为非所链接架构的存档(armv7s)而构建: /Users/hidden/Library/Developer/Xcode/DerivedData/HelloWorldCppLib-fomvvtklwijvqicyhahxleiscein/Build/Products/Debug-iphoneos/libHelloWorldCppLib.a

我错过了什么?它告诉我 .a 文件不是为 armv7s 构建的,但这正是我构建库时使用的设置。

【问题讨论】:

标签: ios xcode static-libraries armv7


【解决方案1】:

我自己也遇到过类似的问题。 @graver的解决方案绝对有效。

问题是库是为armv7 而不是armv7s 构建的。您可以使用lipo <path/to/lib.a> -info 自行验证。

Build Active Architectures Only 选项设置为No 可解决此问题。

希望这会有所帮助。

【讨论】:

  • 谢谢! Library 的“Build Active Architectures”发布是 YES,debug 是 NO。到 YES 修复它。
【解决方案2】:

当您构建库时,您必须为模拟器和设备编译它,然后将两个输出(.a 文件)合并到 1 个库中,然后将其链接到您的 iOS 项目。

【讨论】:

  • 成功了!我在终端中运行了这个:lipo -create libHelloWorldCppLibPhone.a libHelloWorldCppLibSimulator.a -output libHelloWorldCppLib.a 并将合并的结果导入到我的 iOS 项目中。
  • @ThomasCle 感谢分享这个很棒的技巧!
  • 我创建了一个脚本来简化合并过程:cupcakecoding.com/coding/…
  • 这对我有用!当我只打算在设备上运行它时,我仍然不确定为什么需要为模拟器和设备编译它。有人有什么想法吗?
  • 谢谢你,Thomas 这工作完美,救了我! :)
【解决方案3】:

另外一个注释是:

    Build Active Architectures Only  set to no

用于 lib 项目。

【讨论】:

  • 谢谢。这是我更新 SDWebImage 库时遇到的问题
【解决方案4】:

我在使用 cocapods 时遇到了完全相同的错误:对我来说,解决方案是为目标和 pod 构建两个不同的 Active Architecture。

应用目标:

Build Active Architectures Only  **Yes**

豆荚目标

Build Active Architectures Only  **No**

【讨论】:

  • 这解决了其他解决方案没有解决的问题?
  • 它工作得非常好...... cocoapods 总是会出现这样的新问题......
  • 谢谢!像魅力一样工作。
【解决方案5】:

不幸的是,所有这些建议都对我不起作用 - Xcode 7.3.1 (7D1014),iPhone 5。 但是一旦我删除了所有 Xcode 临时文件(+ 重新启动 Xcode)并再次重建它就开始工作了。

【讨论】:

    【解决方案6】:

    通过 CocoaPods 使用的 Facebook SDK (v 4.24.0) 确实发生在我身上。

    在 Pod 上清理或将 Build Active Architectures Only 设置为 NO 并不能解决问题。

    解决方案是清空构建目录(请参阅构建设置/构建位置/CONFIGURATION_BUILD_DIR)或$(CONFIGURATION_BUILD_DIR) Xcode 变量。

    【讨论】:

    • 请注意,这是对其他解决方案中显示的所有内容的补充。在 cocoapods 问题上为我工作。
    【解决方案7】:

    我使用 XCode 5.1.1 并遇到了所描述的问题。解决这个问题的一种更方便的方法似乎只是创建一个存档(通过菜单 Build/Archive)并分发它。分布式 lib 文件将包含所有已定义的架构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      相关资源
      最近更新 更多