Mac OSX Lion で SimpleOpenNi をビルドする

SimpleOpenNI のソースには OSX用のビルドスクリプト buildOsx.sh が付属するが、Lion に対応してないのかなかなかの難物。

OpenNI をインストール

こちらを参考に。
OpenNIをHomebrewでインストール http://www.cyber.t.u-tokyo.ac.jp/~take/blog/kinect/install-openni-with-homebrew.html

依存パッケージをインストールする

Homebrew で eigen, swig, boost をインストールする。
ただし、単純に brew install xx...ではすまない。

eigen のインストール

eigen のインストールに失敗する場合は、gfortran をインストールしてから再度インストールする。

% brew install gfortran
% brew install eigen 
boost のインストール

SimpleOpenNI は libboost_thread-mt の i386 バイナリを利用するため、--universal オプションを追加すること。

% brew install boost --universal

通常のビルドに比べるとやたら時間がかかる。

swig のダウングレード

swigのバージョンが 2.0.7 だとスクリプトが Segmentation fault を起こして中断してしまう。
そこで、swig が入っている場合一度削除して再インストールする。

% brew unlilnk swig

brew で旧バージョンのswig をインストールするためには、versions コマンドを使う。

% brew versions swig
2.0.6    git checkout 9966773 /usr/local/Library/Formula/swig.rb
2.0.4    git checkout 0d8d92b /usr/local/Library/Formula/swig.rb
fatal: Not a valid object name f5779b8:Library/Formula/swig.rb

ずらずらと出るメッセージは、Homebrew が対応しているバージョンと、そのバージョンを利用するためのコマンドの一覧である。
ここでは2.0.6 にダウングレードする。

% git checkout 9966773 /usr/local/Library/Formula/swig.rb
% brew install swig

CMakeLists.txt の修正

boost_thread.a を使う設定になっているが、これを boost_thread-mt.a に修正する。

===================================================================
--- CMakeLists.txt	(revision 426)
+++ CMakeLists.txt	(working copy)
@@ -67,7 +67,7 @@
   
 	IF(APPLE)
 		# osx
-		set(Boost_LIBRARIES  "boost_thread.a")
+		set(Boost_LIBRARIES  "boost_thread-mt.a")
 	ELSEIF(UNIX)
 		# unix/linux,shared libs of boost should be installed
 		set(Boost_LIBRARIES  "boost_thread.a")

buildOsx.sh の修正

OPEN_NI_INCLUDE と XN_NITE_INCLUDE は、/usr/local/include にある。

===================================================================
--- buildOsx.sh	(revision 426)
+++ buildOsx.sh	(working copy)
@@ -30,9 +30,9 @@
 
 echo "--- generate cmake ---"
 cmake -DCMAKE_BUILD_TYPE=Release \
-	  -DOPEN_NI_INCLUDE=/usr/include/ni/ \
+	  -DOPEN_NI_INCLUDE=/usr/local/include/ \
 	  -DOPEN_NI_LIB=/usr/lib/ \
-	  -DXN_NITE_INCLUDE=/usr/include/nite/ \
+	  -DXN_NITE_INCLUDE=/usr/local/include/ \
 	  -DXN_NITE_LIB=/usr/lib/ \
 	  -DEIGEN3D_INCLUDE=/usr/local/include/eigen3/ \
 	  -DP5_JAR=/Applications/Processing.app/Contents/Resources/Java/core.jar \

スクリプトを実行する

ここまで来てやっとビルドスクリプトが動きます。

% ./buildOsx.sh

山ほどwarningが出るが無視無視無視。

% ./installOsx.sh

インストールスクリプトが何事もなく動くありがたさを噛み締めましょう。

~/Documents/Processing/libraries/SimpleOpenNI 下に SimpleOpenNI がインストールされます。

Processing でexamples を開いて試してみましょう。