MacOSX 10.7とXcode4.2でNITEのビルド環境を構築

Dancing With Swarming Particles
前回の[Kinect] MacOSX 10.7にOpenNIとNITEをインストールで、OpenNIとNITEの実行環境が整ったと思っていたのですが、サンプルソースを書いて実行を使用とするとビルドでエラーになったので、そのメモ書き。

まずはXcode4.2を開いて

  1. 「Create a new project」を選択。
  2. サイドバーからMacOSXのApplicationを選択し、Command Line Toolを選んでNext
  3. ProductNameとCompanyIdentifierを適当に入力し、Typeで「c++」を選択して新規プロジェクトを作成

次にSamplesConfig.xmlを用意します。
[css title=”SamplesConfig.xml” htmlscript=”1″]
<OpenNI>
<Licenses>
<License vendor="PrimeSense" key="0KOIk2JeIBYClPWVnMoRKn5cdY4="/>
</Licenses>
<Log writeToConsole="false" writeToFile="false">
<!– 0 – Verbose, 1 – Info, 2 – Warning, 3 – Error (default) –>
<LogLevel value="3"/>
<Masks>
<Mask name="ALL" on="true"/>
<Masks>
<Dumps>
</Dumps>
</Log>
<ProductionNodes>
<Node type="Image" name="Image1">
<Configuration>
<MapOutputMode xRes="640" yRes="480" FPS="30"/>
</Configuration>
</Node>
<Node type="Depth" name="Depth1">
<Configuration>
<MapOutputMode xRes="640" yRes="480" FPS="30"/>
</Configuration>
</Node>
<Node type="User" />
<Node type="Hands" />
<Node type="Gesture" />
</ProductionNodes>
</OpenNI>
[/css]

作成できたら、とりあえず先程作成したプロジェクトファイルと同階層に設置しておきます。
次に、プロジェクトファイルを開きmain.cppを記述します。
XMLのファイル設置場所は適宜変更してください。

[sourcecode language=”plain” title=”main.cpp”]
#include <iostream>
#include <stdexcept>

#include <XnCppWrapper.h>
#include <XnVSessionManager.h>

const char* CONFIG_XML_PATH = "/Users/xxx/Kinect/KinectSensorPrograming/src/2.1/SamplesConfig.xml";

int main (int argc, const char * argv[])
{

try {

xn::Context context;
XnStatus rc = context.InitFromXmlFile(CONFIG_XML_PATH);
if (rc != XN_STATUS_OK) {
throw std::runtime_error(::xnGetStatusString(rc));
}

XnVSessionManager sessionManager;
rc = sessionManager.Initialize(&context, "Wave,Click", "RaiseHand");
if (rc != XN_STATUS_OK) {
throw std::runtime_error(::xnGetStatusString(rc));
}

std::cout << "Success" << std::endl;

} catch (std::exception& ex) {
std::cout << ex.what() << std::endl;
}

return 0;

}

[/sourcecode]

最後に、プロジェクトファイルの「Header Search Paths」に「/usr/include/ni/」と「/usr/include/nite/」、「Other Linker Flags」に「/usr/lib/libOpenNI.dylib」と「/usr/lib/libXnVNite.dylib」をそれぞれ設定。

これで概ね準備が整ったので、ビルドをしてみると
[sourcecode language=”plain” gutter=”0″]
Command /Developer/usr/bin/clang++ failed with exit code 1
[/sourcecode]
というエラーがでました。

色々ググッてみたのですが、イマイチ回答にたどり着かなかったので
Xcode4.2ではなく、Xcode3.2.6でも同じプロジェクトファイルをビルドしてみると
[sourcecode language=”plain” gutter=”0″]
Command /Developer_3_2_6/usr/bin/g++-4.2 failed with exit code 1
[/sourcecode]
というエラーがでました。
なんか微妙にエラー内容が違うなぁと思い、エラーログを詳しく見てみると先程指定した、「/usr/lib/libXnVNite.dylib」がnot foundだと言っているようでした。

前回のエントリーでもサンプルプログラムが動いていたのでおかしいなぁと思いつつ該当のライブラリを見てみると、確かに「libXnVNite_1_5_0.dylib」はあるのですが「libXnVNite.dylib」がありませんでした。。これにまったく気づかず、相当悩んでました。。

なので、該当ライブラリをコピーしてみます。
[sourcecode language=”plain” gutter=”0″]
sudo cp libXnVNite_1_5_0.dylib libXnVNite.dylib
[/sourcecode]

これで再度ビルドすると、エラーはなくなりました。
[sourcecode language=”plain” gutter=”0″]
Setting resolution to VGA
Warning: USB events thread – failed to set priority. This might cause loss of data…
Success
Program ended with exit code: 0
[/sourcecode]

とりあえずやっとスタートラインに立てたかなぁ。。
環境がちょっと違うだけで、えらいこっちゃです。