NVidiaのGPUを積んでないMacBook AirにVisual SfMをインストールする奇特なプレイの道のりを記したメモ.GPU使う気満々の方は参考にする際気をつけてください.Visual SfMのサイト (
http://homes.cs.washington.edu/~ccwu/vsfm/) から Mac OSX x86_64 向けのソースコードをダウンロードする.以後は基本的に同ページのインストールガイド (
http://homes.cs.washington.edu/~ccwu/vsfm/install.html#mac) に従って作業する.
環境:Mac OSX 10.7.4, Core i7, グラボ無し (intel HD3000)
1. gtk+のインストール
もうしてあった.makefileも見た感じ編集する必要無さそうだった.必要に応じてpkg-configのパスを編集.pkg-configのパスは,$ echo $PKG_CONFIG_PATH で確認可能.
2. X11+GLX+OpenGLが使えるか確認
よくわからなかったのでスルー
3. make
エラー.一番上のエラーはこんな感じ.
Package cairo was not found in the pkg-config search path.
Perhaps you should add the directory containing `cairo.pc'
to the PKG_CONFIG_PATH environment variable
Package 'cairo', required by 'pangocairo', not found
cairoのインストール自体はされていたが,.pcファイルが先の$PKG_CONFIG_PATHで指定されたフォルダに無かったので,他のファイルを参考にシンボリックリンクを張った.
$ cd $PKG_CONFIG_PATH
$ ln -s ../../Cellar/cairo/1.10.2/lib/pkgconfig/cairo.pc
これを,同様のエラーが出なくなるまで,同様の手順で繰り返す.ライブラリ自体が無い場合はhomebrewから追加でインストール.自分の環境では,先のcairoとfreetype,fontconfigというライブラリに関して対処を行ったらmakeが通った.いずれもpango何とかっていうやつの依存ライブラリだった.
余談
ライブラリ自体はhomebrewを使ってインストールしていたのに.pcが無かったのは,インストールしたfomulaが「keg only」だったから.keg onlyというのは要するに,「一応今インストールはしましたが,今あなたがインストールしたものはOSXにデフォルトで入っているので,何もしないとOSXデフォルトの方を使いますよ.新しく入れた方を使いたかったら明示してね」ということ.
4. SiftGPUのインストール
ソースコードをダウンロード後,makefileの「siftgpu_disable_devil = 0」を 1 にした.makeするとエラー.
4.1 エラーその1
ヘッダファイルが見つからないらしい./usr/X11/include/GLというフォルダに所望のファイルがあったので,さっきダウンロードしてきたSiftGPUのフォルダにある「include」というフォルダに,gl.h, glx.h, glxext.h の3つをコピー.
4.2 エラーその2
「/usr/lib64」「/opt/local/lib」が無い.とりあえずmakefileの58行目と90行目から上記2つに関する記述を削除.もうひとつ,libglewも無いと言われたので,これはhomebrewからインストール.
4.3 エラーその3
「Xなんとか」と名のつくシンボルがUndefinedだと言われた.名前から判断して適当にライブラリを追加する.makefileの89行目,LIBS_SIFTGPUに「-lX11 -lgl」を追加.その下の90行目に「-L/usr/X11/lib」を追加.
この状態で make siftgpu するとビルドできた.正直奇跡に近い.できあがったlibsiftgpu.soとlibsiftgpu.aを,Visual SfMのbinにコピー.
5. PBAのインストール
ソースコードをダウンロード後,makefile_no_gpuという切ない名前のファイルをmakefileにリネームしてmake.やはりエラー.
5.1 エラーその1
手元のCPUに最適化してくれるオプション「-march=native」の,nativeが上手く働かない.gccのバージョンが古くて,corei7向けの最適化ができないからだった.gccのバージョンを上げてみたが上手くいかず,面倒になったので-marchオプションを消す.
5.2 エラーその2
#include <malloc.h>
↓
#include <stdlib.h>
これでmakeが通るので,libpba_no_gpu.aとlibpba_no_gpu.soを,それぞれlibpba.aとlibpba.soにリネームしつつVisual SfMのbinにコピー.
6. 起動
VisualSfM/bin にある「VisualSFM」を実行すると起動できる.SfMもできたけど,GPUが使えないとSIFTが全然早くない.疲れたのでここまで.
7. エクストラステージ
gccのバージョンを上げたので,SIFT-GPUをコンパイルし直す.なぜか当環境では-march=nativeがうまく動かないので,corei7を明示的に指定する.
makefileの24行目を以下のようにする
siftgpu_sse_options = -march=corei7 -mfpmath=sse
57行目,使うコンパイラとしてg++-4.9を明示.
CC = g++-4.9
61行目から「Simple hack」なるものがあるが,gccのバージョンを上げたので一連の処理をコメントアウト.これで少しは早くなる?