Windows + g95 で LAPACK を使う

自分用の覚え(本家の日記のメモをここにも書いておく)。手許の環境は WinXP SP3 + MinGW gcc + g95 (\MinGW\bin にインストールされてる) + LAPACK 3.2.1 (以上、全部32bit版)である。

コンパイル済みのバイナリ mingw32-lapack-3.2.1-1.zip をとってくる

まず sourceforge.com MinGW LAPACK - Google 検索 をして、MinGW Cross Compiler - Browse Files at SourceForge.net のページに入るとなぜかページ上方の[Download Now!]の緑色のボタンが mingw32-lapack-3.2.1-1.zip をダウンロードする設定になっていたから、ダウンロードして解凍する。

DLLを適当なフォルダに入れる

zip ファイルを解凍すると bin, lib の二つのフォルダが出来上がっているから、bin フォルダの中の blas.dll, lapack.dll を C:\WINDOWS\System32 フォルダに入れる(←ボクは .dll を C:\WINDOWS\System32 フォルダに入れる習慣にしているだけなので、他のフォルダでも(多分)OK*1)。

コンパイル時に DLL をじかにリンクする

LAPACK のルーチンを使う fortranソースコード(test.f としよう)を書いて

g95 test.f C:\WINDOWS\System32\blas.dll C:\WINDOWS\System32\lapack.dll
と書いてコンパイルすると、行列計算をしてくれる実行型ファイル a.exe を作ってくれた*2

サブルーチンの使い方はネットで調べる

LAPACK の各サブルーチンの使い方についてはいろんなサイトに書いてあるので目的に合わせて探せばよい。引数の書き方がよくわからないときは、本家のサイトからソースコード http://www.netlib.org/lapack/lapack.tgz をとってきて引数の宣言を読むのが、一番手っ取り早い…気がする。

*1:[2010.11.27]これらの dll は path の通ったフォルダに入れておく必要がある。

*2:[2010.11.27]このコンパイルで行っていることは test.f に lapack, blas のインターフェースの形を教えること。dll は実際には a.exe を実行するときに呼び出している。