.a is missing one or more architectures required by this target: arm64¶
更新日期:2022-2-18
- 2022-2-18 更新格式
- 2022-1-20 创建文档
开发环境
- Xcode13
- macOS Big Sur 11.4
问题描述¶
工程设置Architectures
:Standard Architectures(arm64, armv7)
引用了libcrypto.a,打包的时候报错
The linked library 'libcrypto.a' is missing one or more architectures required by this target: arm64.
如果给工程EXCLUDED_ARCHS
加上arm64
,编译报错
The linked library 'libcrypto.a' is missing one or more architectures required by this target: armv7.
文件路径正确。这么看它arm64和armv7都不支持。
排查¶
使用lipo -info
命令检查,发现它是x86_64架构的
lipo -info libcrypto.a
Non-fat file: /Users/rustfisher/Downloads/libcrypto.a is architecture: x86_64
那么我们有必要用另一个文件来替换
处理¶
编译OpenSSL¶
在GitHub上找到相应工程OpenSSL-for-iPhone,clone到本地目录OpenSSL-for-iPhone
根据仓库说明,下载代码后运行脚本编译
OpenSSL-for-iPhone $ ./build-libssl.sh
Build options
OpenSSL version: 1.1.1d
Targets: ios-sim-cross-x86_64 ios64-cross-arm64 ios64-cross-arm64e tvos-sim-cross-x86_64 tvos64-cross-arm64
iOS SDK: 15.0
tvOS SDK: 15.0
Number of make threads: 8
Configure options: no-deprecated
经过一段时间的编译,得到库文件。查看它们支持的架构情况
OpenSSL-for-iPhone $ xcrun -sdk iphoneos lipo -info ./lib/*.a
Architectures in the fat file: ./lib/libcrypto-tvOS.a are: x86_64 arm64
Architectures in the fat file: ./lib/libcrypto.a are: x86_64 arm64 arm64e
Architectures in the fat file: ./lib/libssl-tvOS.a are: x86_64 arm64
Architectures in the fat file: ./lib/libssl.a are: x86_64 arm64 arm64e
替换¶
编译得到了libcrypto.a,可以把arm64和arm64e架构拆出来
把最后这个文件重命名,替换进工程即可。
工程编译得到的.a库,从Xcode点击打开finder比较好找,位置比如
/Users/rustfisher/Library/Developer/Xcode/DerivedData/ucstcplib-dsjhrxtmlntksrhhanoqjzbjnrqo/Build/Products/Release-iphoneos/mylib.a
小结¶
遇到类似的问题,可以先从检查库文件支持架构的情况。熟练掌握lipo的使用方法,从源头查出问题。
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~