ndroid NDKで使える線形代数ライブラリ(平たく言うとベクトルや行列演算などの2D,3Dグラフィックスの演算を行うライブラリ)を色々調べていたのだが、そのなかでもEigenの使い勝手がよさそうなので試しに使っているところ。OpenGLとの親和性も高く、使い勝手がよさそうなので今後使っていこうかと思っている。
Eigenの特徴は、テンプレートライブラリであること。つまり、ライブラリのビルドが不要で、ヘッダファイルを取り込むだけでプロジェクトで使える。これだとAndroid NDKのような特殊な環境(でもなくなってきた?)でもすんなり使える。
ただ、Android NDKで使える様にするにはちょっとした設定が必要なので、そのメモを兼ねて記録を残しておく。ここでは、Eigen 3.1.2、NDKr8eを使った。
ダウンロード~インストール
Eigenの公式サイトから、たどってEigen 3.1.3をダウンロードする。
ダウンロードしたファイルを展開した後は、その中にあるEigenフォルダをプロジェクトのjniフォルダにコピーする。これだけ。
$ tar xvf eigen-eigen-xyz.tar.gz2 $ cp -a eigen-eigen-xyz/Eigen ~/workspace/project_foo/jni
設定
このEigenは、Complexライブラリが必要なので、初期設定のプロジェクトではビルドできない。そのため、Application.mkファイルで、Complexライブラリが利用できるSTLportやlibstdc++を指定する必要がある。
ここでは、STLport(静的ライブラリ)をリンクするよう指定した。
APP_STL := stlport_static
あとは、Android.mkファイルでEigenライブラリを参照するように設定する。
LOCAL_C_INCLUDES += $(LOCAL_PATH)
これでEigenが使える様になった。
余談
ダウンロードしたEigen 3.1.3には、Eigen2とEigen3のサンプルコードが混在してるので参考にするときは注意しないといけない…。