从源码编译的原因
官方已经有编译好的包可下载:https://opencv.org/releases/
但是在iOS项目中集成官方编译的pack(目前为 4.8.0),出现以下错误:
ld: in /.../opencv2.framework/opencv2(opencl_kernels_calib3d.o), building for iOS Simulator, but linking in object file built for iOS, file '/.../opencv2.framework/opencv2' for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
原因是官方编译的iOS pack,并没有包含 arm64 架构。
那么我们自己从源码开始编译,传入正确的编译参数。
系统及软件要求
- MacOS 10.15 或 以上
- Python 3.6 或 以上
- CMake 3.18.5/3.19.0 或 以上
- Xcode 12.2 或 以上
开始
-
下载源码并解压(本文使用的是4.x版);
-
找到
platforms/apple/build_xcframework.py
,注释掉if catalyst_archs:
和if macos_archs:
两个代码块(if语句及if里面的内容)。
-
终端进入到源码根目录,执行编译:
(如果需要视频处理功能,请移除 --without=video)
python3 platforms/apple/build_xcframework.py --out ./my_build_xcframework --without=video --iphoneos_archs arm64
可见my_build_xcframework根目录下有个 opencv2.xcframework
包(里面包含模拟器和真机库)。
参考资料
官方的编译说明
参考GitHub Issue中的一个有用回答