Boost と Boost.Bindings と clapack のインストール
今回は lapack の機能を使えるようにするための準備(インストール)を行います.
そのためには以下の三つのコンポーネントをインストールする必要があります.
- boost
- boost-sandbox
- clapack
一つずつ説明していきます.
boost のインストール
uBLAS はこの boost のコンポーネントの一つです.boost のインストールにはヘッダファイルをダウンロードするだけでいいのですが,それには次の二つの方法があります.
- Boost Downloads の Download リンクからダウンロード
- Subversion によりダウンロード
後者の場合,boost の最新開発版をダウンロードすることになります.
Subversion を用いる場合,以下のコマンドでダウンロードできます.
svn co http://svn.boost.org/svn/boost/trunk boost
ここでは,Subversion のインストールはすでに終わっているものとします.
前者の場合は解凍したフォルダを,後者の場合はダウンロードしたフォルダを適当な場所
(ここでは C:\Program Files とします)に保存し,コンパイラがヘッダファイルを読み込めるようにパスを設定します.
(前者の場合,C:\Program Files\boost_1_XX_X,後者の場合 C:\Program Files\boost)にパスを通すことになります.
C:\Program Files\boost_1_XX_X\boost あるいは C:\Program Files\boost\boost フォルダに
- accumulators
- algorithm
- archive
- asio
- assign
などのフォルダがあることを必ず確認してください.
以上で boost のインストールは終了です.より詳しく知りたい方は
をご覧ください.
boost-sandbox のインストール
Boost.Bindings はこの boost-sandbox のコンポーネントの一つです.boost のときと同じく,Subversion によりヘッダファイルをダウンロードし,コンパイラのパスを通すだけでインストールは完了です.
boost-sandbox は以下のコマンドによりダウンロードできます.
svn co http://svn.boost.org/svn/boost/sandbox boost-sandbox
sandbox や レポジトリの構成については
をご覧ください.また,最新の Boost.Bindings は
で手に入ります.
clapack のインストール
Windows で開発を行っている場合,clapack のインストールは信じられないくらい簡単です.というのも,clapack を公開している
がすでにビルド済みのバイナリを公開してくれているからです.遠慮せず全部ダウンロードしてコンパイラのパスを通しておきましょう.
Linux で開発を行っている場合……そういう人はすでに予期していることと思いますが……clapack のコンパイルが必要です…….
今回の説明では,現時点での最新版である clapack 3.1.1 のコンパイルとインストールの説明を行いたいと思います.
まず clapack.tgz をダウンロードし,適当な場所に解凍します.
解凍したフォルダにある README.install というファイルをざっと眺めてみます.
そこには,
"各プラットフォーム向けの make.inc が CLAPACK/INSTALL ディレクトリにあるから,それを CLAPACK にコピーして持ってきて,必要があれば適当に修正してね."
と書かれています.しかし,CLAPACK/INSTALL のどこにもそのようなファイルはありません.
私は初めて clapack 3.1.1 を(このときは cygwin に)インストールしようとしていたとき,この問題につまづきました.
解決したときにこの過疎スレに書き込んだのですが,あまりに過疎過ぎて心配なため,念のためここにもその方法を記しておこうと思います.
具体的には,次のようにします.
- このサイトに前のバージョン(3.0)の clapack があるため,ダウンロードして解凍します.
- このバージョン 3.0 には CLAPACK/INSTALL にちゃんと make.inc.LINUX があることを確認します.
- このバージョン 3.0 の make.inc.LINUX を参考にしながら,バージョン 3.1.1 の CLAPACK フォルダにある make.inc.sample を次のように書き換え,それを make.inc とします.
- 「SHELL = /bin/sh」を追加.
- 「CC = gcc -ffloat-store」に変更.-ffloat-storeオプションをつけないと clapack のテストに通りません(詳細 http://icl.cs.utk.edu/lapack-forum/archives/lapack/msg00429.html).
- 「CFLAGS = -funroll-all-loops -O3」に変更.
- 「LOADOPTS = $(CFLAGS)」に変更.
- 「NOOPT = 」に変更(NOOPTは空にする).
- cygwin でコンパイルする場合,cygwin の gcc のデフォルトの出力ファイル名は a.exe になっているため,F2CLIBS\libf2c\Makefile の186行目と187行目の a.out を a.exe に変更します.
あとはひたすら make します.具体的には,次のようにします(README.install に書かれていることと同じです).
make f2clib make blaslib cd BLAS/TESTING make -f Makeblat2 cd .. ./xblat2s < sblat2.in ./xblat2d < dblat2.in ./xblat2c < cblat2.in ./xblat2z < zblat2.in cd TESTING make -f Makeblat3 cd .. ./xblat3s < sblat3.in ./xblat3d < dblat3.in ./xblat3c < cblat3.in ./xblat3z < zblat3.in cd ../SRC make cd ../TESTING/MATGEN make cd .. make
CLAPACK/INCLUDE フォルダを好きな場所にコピーし,コンパイラのパスを通します.
また,
を好きな場所にコピーし,コンパイラのパスを通します.
さらに,
のシンボリック リンクを作成します.
clapack を使ったソースコードをコンパイルするときは?
次のようにします.あるいは,
-
- 次のコードをソースに加える.
#pragma comment(lib, "BLAS.lib") #pragma comment(lib, "libf2c.lib") #pragma comment(lib, "clapack.lib")
VC でリンク時にエラーがでる・・・
- xxx は既に MSVCRT.lib(MSVCRXX.dll) で定義されています。
- defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
- defaultlib 'libcmt.lib' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
プロジェクト→プロパティ→構成プロパティ→リンカ→コマンド ラインに /NODEFAULTLIB:libcmt を加えます.
ところで,コンパイラのパスを通すって?
それぞれの開発環境ごとにパスの通し方は違ってくるため,ここでは詳細に説明できませんが,次の2つの有名な開発環境では大体以下のようにします.Linux で開発を行っている方で,毎回 -I や -L を指定するのが面倒だという人は,環境変数
- C_INCLUDE_PATH
- CPLUS_INCLUDE_PATH
- LIBRARY_PATH
- LD_LIBRARY_PATH
について調べてみるとよいかもしれません.
次回は早速 clapack を用いて特異値分解(SVD, Singular value decomposition)を計算してみます.