42

我已经构建了自己的静态 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 构建的,但这正是我构建库时使用的设置。

4

7 回答 7

36

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

问题是该库是为armv7而不是为armv7s. 您可以使用自己验证这一点lipo <path/to/lib.a> -info

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

希望这可以帮助。

于 2013-06-22T03:09:05.823 回答
33

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

于 2013-02-12T08:56:47.900 回答
23

另一个注意事项是:

    Build Active Architectures Only  set to no

用于 lib 项目。

于 2014-03-08T10:09:02.003 回答
7

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

应用目标:

Build Active Architectures Only  **Yes**

豆荚目标

Build Active Architectures Only  **No**
于 2015-12-16T17:48:25.650 回答
2

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

于 2016-08-18T05:32:03.737 回答
1

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

清洁或设置Build Active Architectures Only到PodNO并不能解决问题。

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

于 2017-06-27T08:00:55.127 回答
0

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

于 2014-08-16T11:21:50.127 回答