2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenCV for iOS ビルド

Last updated at Posted at 2022-12-28

はじめに

iOSアプリ開発で最新のOpenCVを使いたい、M1 macを使っていて公式ビルドを使えない、他の記事を参考にビルドするとエラーが起きる、方向けの内容です。ビルドしたいだけの方は最後だけ読んでください。

前提

  • MacBook Pro M1
  • Xcode 14.2
  • OpenCV 4.6.0
  • cmake 3.24.0

Lessons Learned

公式ビルドはM1に対応していない

最初に一番お手軽な公式ビルドのライブラリを追加してみたのですが、iOSアプリのビルド時に以下のエラーとなります。ログから、x86_64シミュレータ向けビルドのみで、arm64シミュレータ向けのビルドは含まれていない、と解釈しました。Rosettaを使えば何とかなるかもしれませんが、Nativeビルドを選択しました。Excluded Architecturesにフラグを付ける云々の記事がありますが、別問題のようです。

Could not find module 'opencv2' for target 'arm64-apple-ios-simulator'; 
found: x86_64-apple-ios-simulator, armv7s, armv7s-apple-ios, armv7-apple-ios, 
i386-apple-ios-simulator, arm64-apple-ios, armv7, at:

自前ビルドを試みる(失敗する方法)

いくつかの記事を見て、下記のコマンドでビルドしてみました。

% python opencv/platforms/apple/build_xcframework.py --iphoneos_archs armv7,armv7s,arm64 --iphoneos_deployment_target 12 --iphonesimulator_archs arm64 -o ./build --build_only_specified_archs --contrib opencv_contrib

すると、以下のようなエラーで止まります。ここではまりました。CPU_BASELINE関連で調べて、最適化オプションの無効化等試しましたが上手く回避できなく時間を溶かしました。

CMake Error at cmake/OpenCVCompilerOptimizations.cmake:593 (message):
  Compiler doesn't support baseline optimization flags:
Call Stack (most recent call first):
  cmake/OpenCVCompilerOptions.cmake:327 (ocv_compiler_optimization_options)
  CMakeLists.txt:631 (include)

成功する方法

あれこれ試している過程で、新しいビルド環境がarmv7、armv7sをサポートしていない旨の警告ログが出力されました。ということで、以下のように、arm64のみを指定してめでたく成功です (何も考えずに付けてましたが、iPhone 5とかサポートする必要ないですもんね。。。)

% python opencv/platforms/apple/build_xcframework.py --iphoneos_archs arm64 --iphoneos_deployment_target 12 --iphonesimulator_archs arm64 -o ./build --build_only_specified_archs --contrib opencv_contrib

後は、Xcodeのプロジェクトで、Link Binary With Libraries にopencv2.xcframeworkと libc++.tbdを追加して、Other Linker Flagsに -all_load を追加すれば良いようでした。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?