从源码编译OpenCV

发布时间 2023-09-02 12:54:45作者: 逆行

从源码编译的原因

官方已经有编译好的包可下载: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 或 以上

开始

  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 包(里面包含模拟器和真机库)。

参考资料

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