错误:“文件是为归档而构建的,而不是被链接的架构(armv7s)”

时间:2013-02-12 08:50:05

标签: ios xcode static-libraries armv7

我已经构建了自己的静态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, file was为存档而构建的不是被链接的架构(armv7s): /Users/hidden/Library/Developer/Xcode/DerivedData/HelloWorldCppLib-fomvvtklwijvqicyhahxleiscein/Build/Products/Debug-iphoneos/libHelloWorldCppLib.a

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

7 个答案:

答案 0 :(得分:36)

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

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

自行验证

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

希望这有帮助。

答案 1 :(得分:33)

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

答案 2 :(得分:23)

另外一个注意事项是:

    Build Active Architectures Only  set to no

用于lib项目。

答案 3 :(得分:7)

使用cocapods时,我得到了完全相同的错误:对我来说,解决方案是为目标和pod设置两个不同的构建活动架构。

App Target:

Build Active Architectures Only  **Yes**

pods Target

Build Active Architectures Only  **No**

答案 4 :(得分:2)

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

答案 5 :(得分:1)

通过CocoaPods使用的Facebook SDK(v 4.24.0)确实发生了这种情况。

在Pod上清除或设置Build Active Architectures OnlyNO无法解决问题。

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

答案 6 :(得分:0)

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