Frameworkの最近のブログ記事

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++のコードでコンパイルエラーになってしまうからです。

ビルド自体はワークアラウンドを見つけたらすぐにできたのですが、その修正は本来どうすればいいのかにトライしはじめちゃって、週末が時間切れになってしまったというのが本当のところです(爆)

このアーカイブについて

このページには、過去に書かれたブログ記事のうちFrameworkカテゴリに属しているものが含まれています。

前のカテゴリはEvernoteです。

次のカテゴリはGadgetです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近のブログ記事

Amazon