我已经构建了自己的静态C ++库,它使用以下设置构建:
库项目构建良好,我得到.a文件(我已经清理了构建文件夹并再次构建项目以确保我的设置有效)。
我已将库(.a文件)添加到我的iOS项目中,但即使我在iOS项目中设置了完全相同的设置,项目也无法构建:
我一直收到这个错误:
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构建的,但这正是我用库构建的设置。
答案 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 Only
到NO
无法解决问题。
解决方案是清空构建目录(请参阅构建设置/构建位置/ CONFIGURATION_BUILD_DIR)或$(CONFIGURATION_BUILD_DIR)
Xcode变量。
答案 6 :(得分:0)
我使用XCode 5.1.1并遇到了所描述的问题。解决此问题的一种更方便的方法似乎只是创建一个存档(通过菜单构建/存档)并分发它。分布式lib文件将包含所有已定义的体系结构。