SSブログ

OpenCV2.4.5のMacOS X用Framework [OpenCV関係]

こないだOpenCVMacOS X用のFrameworkを作りたいと考えていた。今日、最新のOpenCV2.4.5のMacOS X用Frameworkを作ることができた。ただしぼくがやったわけではない....

MacOS XのFrameworkはライブラリ本体とそれを使うためのヘッダやその他のリソースをひとつにまとめてバージョン管理できるようにしたもの。ひとまとめになっているので追加や削除が簡単にできるし、それを使うアプリケーションのバンドルに丸ごと含めてしまうことで、他のアプリと衝突を起こすいわゆるDLL地獄を避けることができる。

OpenCVはiOS用のFrameworkが含まれるようになったけど、これはヘッダが含まれない普通のライブラリと同じような形式になっている。これはiOSデバイス上で開発することはありえないので、当然だけど、MacOS Xだとヘッダが普通の/usr/local/includeとかにあるのでは全然Frameworkにする意味はない。

自分でなんとか作ろうとしてたんだけど、OpenCVは中身が複雑でヘッダツリーを辿るだけでも大変な作業になっていてくじけそうになっていた。 どうしようかと悩んでいたら、もうちゃんとCMake用のファイルを書き換えてFrameworkを作れるようにするパッチを上げてくれている人がいた。
ここ。
OpenCV2.4.0と2.4.1ではできた、と書いてあるけど、今日時点で最新のOpenCV2.4.5(ダウンロードはSourceForgeではなくGitHubからになっている)でもちゃんとできた。日本語を使うユーザのために使い方を書いておく。

OpenCVはGitHubからのtarballパッチを落としておく。tarballを展開すると
opencv-2.4.5
というディレクトリができる。この中にさらに"opencv-2.4.5"というサブディレクトリができるのでそこにcdする。僕の場合ダウンロードフォルダに落としたので、
% cd Downloads/opencv-2.4.5/opencv-2.4.5
とする。ちなみに「%」はシェルプロンプト。パッチファイルもダウロードフォルダに落としたので
% patch -p0 < ../../OpenCVOSXFramework.patch
としてパッチをあてる。CMakeファイルが変更され、今いるopencv-2.4.5ディレクトリにosx-frameworkというディレクトリが作られる。そこにいくつかのファイルができる。そのなかのシェルスクリプトファイルを実行可能にする。
% cd osx-framework
% chmod +x build-osx-framework.sh
% chmod +x install-osx-framework.sh
あとはこのシェルスクリプトを実行する。
% ./build-osx-framework.sh .
とすると、ここにtemp-build-frameworkというディレクトリができて、コンパイルが始まる(ちゃんとgccではなくてclangが使われる。僕のiMacの4コアがフルに動くのは滅多に見ないので壮観。CMakeにそう指定されてるんだろうけど、人力で辿るのは大変で見る気もしない。しかしclangは速い。昔OpenCV1.Xを古いiMacでgccを使ってコンパイルするあいだに晩飯が食べられた)。しばらくして

** BUILD SUCCEEDED **

と、「もうtemp-build-frameworkを消してもいいよ」というメッセージが出れば成功。このディレクトリにFrameworksディレクトリができて、そこにDebugとReleaseのFrameworkが作られる。DebugのほうはOpcnCVを使うアプリをデバグするときのために、どこかにとっておいたほうがいい。さっきのスクリプトの引数にディレクトリを指定することで最終的なFrameworksディレクトリの場所を指定できる。

このあと
% sudo ./install-osx-framework.sh ./Frameworks/Release/opencv2.framework
とすると、元々あると消しちゃうよ、というコンファームがあって、/Library/FrameworksディレクトリにReleaseバージョンのopencv2.frameworkがヘッダツリーごとコピーされて使えるようになる。Frameworkに含まれるライブラリはすべてMach-O形式のi386とx86_64の2アーキテクチャのユニバーサルバイナリになっている。またpython用のcv2.soも含まれている。僕には関係ないけど。

まだ使ってないのでちゃんとFrameworkとして動作するかどうかは確認してないけど、さすがOpenCV。MacOS Xに対しても手厚くて、しっかりしてる。これで自分のアプリバンドルにまるごとOpenCVを含めてしまうことができる。すばらしい、156MBもあって巨大だけど。とりあえず、うれしいねえ。

ところで、作業がパッチの作者の指示と微妙に違ってるけど、たまたま僕がそのようにしたらできた、というだけで他意はない。このパッチで作られるスクリプトはちゃんとしてるのでどんなやりかたでも大丈夫なはず。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立04/09献立04/10 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。