おはよう君需要なし

求不得苦な日々

flannのビルドが通らない(ので頑張って解決した)

はじめに

あんまりLinuxを知らない友人から「flannのビルドが通らないよ~~~~」って言われたので、一緒に頑張って解決することにした。

聞くところによると、普通のバイナリは吐くんだけどmexでコンパイルしてくれないんだ~~とのこと。matlabとかmexとかあんまり詳しくないんだけれど・・・って感じだけど頑張ってみることにした。

flannのユーザーマニュアルによれば、

$ cd flann-x.y.z-src
$ mkdir build
$ cd build
$ cmake ..
$ make

でできるよ、と書いてある。まぁオーソドックスな手順だし、こんなとこでつまづかないっしょ~~って思っていたら

CMake Warning at src/matlab/CMakeLists.txt:79 (message):
  Cannot find MATLAB or Octave instalation.  Make sure that the 'bin'
  directory from the MATLAB instalation or that mkoctfile is in PATH

なんてコワーイWarningが出ていました。matlabのインストールフォルダがわからないようってことでしょうか。

matlab

当然matlabはインストールされているので、まずはそのインストールディレクトリを探そう。とりあえず、

$ whereis matlab

ってして、出てきたリンクをたどる。と、/etc/alternatives/matlab -> /usr/local/MATLAB/R2015a/bin/matlab*という出力がされていたので、/usr/local/MATLAB/R2015a/bin/に本体があるということがわかりましたね。

エラーメッセージの正体

matlabはインストールされているのに、なんであんなメッセージを吐いたんだろう・・・と思ってflann/src/matlab/CMakeLists.txtを見てみると、どうやらmexとmexextのバイナリがあるフォルダを見て、それが一致していないと「matlabがインストールされていません」というエラーがでるようになっているみたいだった。なんじゃそりゃ

解決

というわけで、mexとmexextのパスを正しくcmakeに伝えてあげればよいみたい。

$ cmake -DMEX_CMD=/usr/local/MATLAB/R2015a/bin/mex -DMEXEXT_CMD=/usr/local/MATLAB/R2015a/bin/mexext ..

でちゃんと通るようになると思う。あとはmakeするだけ。

-- Found MATLAB at: /usr/local/MATLAB/R2015a/bin

ってログにちゃんと出てくれればOKです。

おわりに

タスク山盛りで人の面倒なんて見てる場合じゃないのに、見てしまいました。そこらへんの優先順位をつけるの、苦手かもしれない。