A View of Tanichu (たにちゅーの思惑)

This blog is about personal thoughts and views by Tanichu. Tanichu is a nickname of Tadahiro Taniguchi.

memo: cpplapack_plusの導入 ubuntu11.10ですんなり行かなかったよ のメモ

谷口の過去の資産プログラムでつかっている cpplapack

c++でのclapackのラッパーです.

これで,僕が自分の仕事をやりやすいように,付加的な関数とか

ベイズ推定するのに ガウス分布や多項分布,ディリクレ分布など おまけをくっつけて

ラッパしている酷いソースコードが cpplapack_plus << PD時代からのためこみ.今や情報系教員なので酷いソースコードは見ないで 的な状況.

まぁ,いいとして,

久しぶりに新環境にいれようとしたら手こずってしまったので.メモまで.

cpplapack_plus @ github

https://github.com/tanichu/cpplapack_plus

?

まず, 入ってなかったら

synapticとかapt-get で

lapackblas のライブラリが入っているか確認.入っていなかったら入れる.

次に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ライブラリの導入です.

http://clx.cielquis.net/

こっから持ってきて,これまた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 (´・ω・`)

あくまで自分のメモまで〜.