memo: cpplapack_plusの導入 ubuntu11.10ですんなり行かなかったよ のメモ
谷口の過去の資産プログラムでつかっている cpplapack
c++でのclapackのラッパーです.
これで,僕が自分の仕事をやりやすいように,付加的な関数とか
ベイズ推定するのに ガウス分布や多項分布,ディリクレ分布など おまけをくっつけて
ラッパしている酷いソースコードが cpplapack_plus << PD時代からのためこみ.今や情報系教員なので酷いソースコードは見ないで 的な状況.
まぁ,いいとして,
久しぶりに新環境にいれようとしたら手こずってしまったので.メモまで.
cpplapack_plus @ github
https://github.com/tanichu/cpplapack_plus
まず, 入ってなかったら
synapticとかapt-get で
lapackとblas のライブラリが入っているか確認.入っていなかったら入れる.
次にcpplapackを入れる.
CPPLAPACKの導入法 (ohnaka version)
基本的には上記の内容でいけるかとおもいますがー.
基本的には cpplapackをsourceforgeからとってきてパスが通るところにおいておけばいい.
コンパイル時は
-llapack –lblas
を忘れずに.
ここで,エラーが出てしまいまして
In file included from /usr/include/cpplapack.h:170:0,
from test.cpp:1:
/usr/include/_dsymatrix-/_dsymatrix.hpp:9:23: error: reference ‘m’ cannot be declared ‘mutable’ [-fpermissive]
In file included from /usr/include/cpplapack.h:172:0,
from test.cpp:1:
/usr/include/_dssmatrix-/_dssmatrix.hpp:9:23: error: reference ‘m’ cannot be declared ‘mutable’ [-fpermissive]
In file included from /usr/include/cpplapack.h:186:0,
from test.cpp:1:
/usr/include/_zhematrix-/_zhematrix.hpp:9:23: error: reference ‘m’ cannot be declared ‘mutable’ [-fpermissive]
In file included from /usr/include/cpplapack.h:188:0,
from test.cpp:1:
/usr/include/_zhsmatrix-/_zhsmatrix.hpp:9:18: error: reference ‘m’ cannot be declared ‘mutable’ [-fpermissive]
的な事を言われました. mutable は参照 reference の宣言では使えませんよー.とのこと.
いろいろ調べて見ると,mutable は参照では意味がない.とのこと. gccのバージョンで禁じられるようになったりしたのかな?
よくわからんが不要とのことで削除します.
それぞれ ファイルに行くと上の方に
mutable つけて &m を宣言しているところがあるので,
機械的に mutable を消していきます.
でもって,cpplapackのフォルダの内容を まるごとリンクが通るようにおいてあげます.
また cpplapack.h は includeが通るパスに入れてあげましょう.
これで,コンパイルすると通るようになりました.
次に,randlibcを入れる必要があります.
乱数演算のためです.
*randlib http://www.mlab.ice.uec.ac.jp/~ej-sib/numerical/numerical_random.html
% cd randlibc % g++ -O2 -c ./source/randlib.c/src/linpack.c % g++ -O2 -c ./source/randlib.c/src/com.c % g++ -O2 -c ./source/randlib.c/src/randlib.c % ar cr librandlibc.a linpack.o com.o randlib.o % ranlib librandlibc.a
ということで,準備できて,librandlibc.a はまた,リンクの通るところにおいてあげます.
及び randlib.h もinclude できるパスにおいてあげます.
次に便利な c++のライブラリ clxライブラリの導入です.
こっから持ってきて,これまたinclude パスが通るところにおいてあげてください.
# clxはヘッダファイル群なので,特にコンパイルは不要
これで
準備完了です.
githubから cpplapack_plus を落として来てくださいませ.
https://github.com/tanichu/cpplapack_plus
あ,gitからは
//github
//cloneをローカルに取得する.
git clone git://github.com/tanichu/cpplapack_plus.git
でいいのかな.
g++ -c cpplapack_plus.cpp -llapack -lblas –lrandlibc
で cpplapack_plus.o を作りましょう.
でもって,
g++ hogehoge.cpp cpplapack_plus.o -llapack -lblas –lrandlibc
とかして使ってください.
基本的には cpplapack_plus.h をincludeすればいけるはず.
サンプルソースは git で main.cpp にあります.
便利なのは
ウィシャート分布のサンプルとか
ガウス分布,多項分布のクラスなどを用意している点.
あとは,過去の遺物の堆積でしかないです.www (´・ω・`)
あくまで自分のメモまで~.