2013/07/07時点のOpenCVのソースからiOS用のframeworkをビルドする方法を説明します。
cmakeをインストールする
www.cmake.orgからダウンロードしてインストールするか、homebrewでインストールします。
www.cmake.orgからパッケージ版をインストールすると、GUIで汎用的に使えるCMakeでOSX上のOpenCVビルド環境を作るにはとても便利ですが、iOS向けのビルド環境はpythonスクリプト一発で内部ではコマンドラインのcmakeを呼び出しているのでhomebrewで大丈夫です。
brew install cmake
ソースコードの取得
普通にGitHubからcloneしてきます。
cd /path/to/repository https://github.com/Itseez/opencv.git cd opencv
後日、試しても同じように実行できるように、この時点のmasterのコミットポイントで実行することにします。
git co de58039 -b build-work
実はあとはplatforms/ios/build_framework.py
というpythonスクリプトを実行するだけで良いはずなのですが、ひとつだけうまくいかない事があります。
リンクが失敗する
実行するとコンパイルが終わって各アーキテクチャ用のスタティックライブラリを生成する時にjmemansi.o
が見つからないというエラーで失敗します。
ビルド環境を直してPull Requestしたいところですが、とても難しそうなのでstackoverflowで紹介されているワークアラウンドでとりあえず回避します。
下記の差分のようにmodules/world/CMakeLists.txt
の102行目に追加します。
diff --git a/modules/world/CMakeLists.txt b/modules/world/CMakeLists.txt index f18635e..1e93991 100644 --- a/modules/world/CMakeLists.txt +++ b/modules/world/CMakeLists.txt @@ -99,6 +99,7 @@ macro(ios_include_3party_libs) list(APPEND objlist "\"${objpath3}\"") endforeach() # (srcname ${sources}) endforeach() + ocv_list_filterout(objlist jmemansi) # <<= dirty fix endmacro() if(IOS AND WITH_PNG)
ビルド実行
あとは適当なワーキングディレクトリでbuild_framework.pyを実行します。
cd /path/to/somewhere python /path/to/repository/opencv/platforms/ios/build_framework.py output
これで/path/to/somewhere/output
ディレクトリ中のbuild
ディレクトリでコンパイルが実行され、同ディレクトリ中のopencv2.framework
がiOS用フレームワークとなります。
CocoaPodsでも入るw
実はiOS用のOpenCVフレームワークはCocoaPodsにも対応しているので
pod 'OpenCV'
でも入りますw
最後に
今回のエントリーはRubyMotionのためのOpenCVラッパーフレームワークを作ろうとしていてビルドできるようにしたかったので書きました。
RubyMotionで通常のopencv2.frameworkを使おうとしても、C APIもC++ APIもRubyMotionのコンパイラがヘッダファイル中に出現するインラインマクロやC++のコードでコンパイルエラーになってしまうからです。
ビルド自体はワークアラウンドを見つけたらすぐにできたのですが、その修正は本来どうすればいいのかにトライしはじめちゃって、週末が時間切れになってしまったというのが本当のところです(爆)
コメントする