跳转至

.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

问题描述

工程设置ArchitecturesStandard 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架构拆出来

lipo -extract arm64 -extract arm64e libcrypto.a -output libcrypto.arm64.a

把最后这个文件重命名,替换进工程即可。

工程编译得到的.a库,从Xcode点击打开finder比较好找,位置比如

/Users/rustfisher/Library/Developer/Xcode/DerivedData/ucstcplib-dsjhrxtmlntksrhhanoqjzbjnrqo/Build/Products/Release-iphoneos/mylib.a

小结

遇到类似的问题,可以先从检查库文件支持架构的情况。熟练掌握lipo的使用方法,从源头查出问题。

本站说明

一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。

AndroidTutorial AndroidTutorial 反馈问题 讨论区 最近更新 投喂作者

Ads