Loading

从OpenCV源码编译iOS库

从源码编译的原因

官方已经有编译好的包可下载: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 架构。

那么我们自己从源码开始编译,传入正确的编译参数。

系统及软件要求

  1. MacOS 10.15 或 以上
  2. Python 3.6 或 以上
  3. CMake 3.18.5/3.19.0 或 以上
  4. Xcode 12.2 或 以上

开始

我使用的是M1芯片的MacBook,OpenCV源码4.x版,按照官方指导的编译步骤并没有成功。
在参考GitHub Issue的一些问答后,我用以下方式成功编译。

  1. 下载源码并解压(本文使用的是4.x版);

  2. 找到 platforms/apple/build_xcframework.py,注释掉if catalyst_archs:if macos_archs: 两个代码块(if语句及if里面的内容)。

  3. 终端进入到源码根目录,执行编译:
    (如果需要视频处理功能,请移除 --without=video)

python3 platforms/apple/build_xcframework.py --out ./my_build_xcframework --without=video --iphoneos_archs arm64

可见my_build_xcframework根目录下有个 opencv2.xcframework 包(里面包含模拟器和真机库)。

理论上步骤2可以省略,因为我们已经通过编译时传参来限制平台。实际上没有注释掉,就是会很奇怪的报错。不管怎么说,拿到一个可执行的iOS库才是关键。

参考资料

官方的编译说明
参考GitHub Issue中的一个有用回答

posted @ 2023-09-02 12:50  逆行  阅读(101)  评论(0编辑  收藏  举报