最近の octave / liboctave インストール

ここ最近の octave / liboctave のインストール方法についてメモ.(Debian / Ubuntu
(追記@Feb.06,2010)共有ライブラリの指定について.

対象は Debian - lenny, squeeze あたり. Ubuntu 9.10 なども,同じ方法でよかったはず.

パッケージのインストール

まずパッケージのインストール. octave3.0 系なら,

sudo apt-get -f install octave3.0 octave3.0-headers octave3.0-htmldoc

だけでよい. libatlas, libfftw3 などは自動で入るようになったようだ.

共有ライブラリの指定 (updated at Feb. 06, 2010)

共有ライブラリ liboctave.so はディレクトリ /usr/lib/octave-x.x.x に置かれており,普通はこのディレクトリに共有ライブラリを探しに行かない.このため, liboctave.so に依存するプログラムを実行すると,

./xxx.out: error while loading shared libraries: liboctave.so: cannot open shared object file: No such file or directory

というエラーが出る.または, ldd で共有ライブラリの対応関係を調べると, liboctave.so => not found と出力される.
よって以下のいずれかの対策が必要.

リンカオプション rpath

プログラムをコンパイルするときに(正確にはリンク段階で),

-Wl,-rpath /usr/lib/octave-`octave-config -v`

オプションをつけて g++ を実行する.すると,できあがったプログラムが探しに行く共有ライブラリの検索パスリストに /usr/lib/octave-x.x.x が加えられる. rpath (linking) - Wikipedia などを参照.

環境変数 LD_LIBRARY_PATH

環境変数 LD_LIBRARY_PATH に /usr/lib/octave-`octave-config -v` を加える.例えば tcsh なら ~/.cshrc に

setenv LD_LIBRARY_PATH /usr/lib:/usr/local/lib:/usr/lib/octave-`octave-config -v`

を加えておく.この方法は, Why LD_LIBRARY_PATH is bad - by David Barr などで述べられているように,トラブルのもとになりやすいらしい.(開発者ならともかく)ユーザが行うような設定ではないそうだ.

ライブラリのシンボリックリンク

/usr/lib に移動して,

 $ sudo ln -s libatlas.so{.3gf,}

を実効.これをしないと, liboctave を使ったプログラムのコンパイルなどで, latlas が存在しない! (/usr/bin/ld: cannot find -latlas) とか言われる.

以上.