拙著「Linux数値計算ツール」に関連する質問が寄せられたときに、参考のためその記録をここに残します。
LAPACK に前々から興味があり、 先日コロナ社から発刊された先生の著書 「Linux 数値計算ツール」 を購入し、読ませていただきました。 それで、自分でも LAPACK をインストールして 使ってみようと思い、先生のご本の9.2「LAPACKの インストール」を参考に、作業を行いました。 clapack.tgz をダウンロードし、展開をして、 README.install に従い作業を進め、 インストールは完了しました。(と思います) そこで、先生のご本のp.147に掲載されている test1.c を gcc test1.c とコンパイルしたのですが、 undefined reference to `dgesv_' とエラー表示されコンパイルできませんでした。 自分でいろいろWebページやニュースグループを 検索してみましたが、詳しい情報が見つからず、 ほとほと困り果て、失礼を承知で先生に メールした次第です。 fortran77 の LAPACK ではコンパイルの時に 「-l lapack」というオプションを指定する必要が あるようなので、コンパイルのときに gcc test1.c -llapack としてみましたが、「lapack というファイルは存在しない」 とエラー表示されます。 私は Vine Linux を使っておりますが、 先生のご本の p.144 を拝見しますと、先生も Vine Linux をお使いのようで、make.inc を2箇所 修正すればインストールできると書かれておりますが、 具体的にはどの個所を修正されたのでしょうか? 私はインストールの際、BLAS を最適化するため make.inc 中の以下の1箇所を修正しました。 BLASLIB = ../../blas$(PLAT).a ご参考までに、私の作業環境は Vine Linux 1.1 Kernel 2.0.36 CPU : PentiumIII 700MHz です。 お忙しい中まことに恐縮ではございますが、 clapack のインストール時に修正する個所、 clapack の関数を用いたCソースのコンパイル 方法について、ポインタだけでも教えていただければ 幸いです。 よろしくお願い致します。
(回答)
ご質問にお答え致します。
> clapack.tgz をダウンロードし、展開をして、
> README.install に従い作業を進め、
> インストールは完了しました。(と思います)
多分、インストールは正常に終了したと私も思います。
> > そこで、先生のご本のp.147に掲載されている test1.c を
> > gcc test1.c >
> とコンパイルしたのですが、
> > undefined reference to `dgesv_'
> > とエラー表示されコンパイルできませんでした。
次のMakefileを使ってみてください。ただし、test1.cをrei.cというファイル名に変 更したとします。
LIB = /usr/local/lib/lapack_alpha.a /usr/local/lib/lsblaspii1.2c_11.99.a /usr/local/lib/libF77.a
rei: rei.o $(LIB)
cc -o rei rei.o $(LIB)
rei.o: rei.c
cc -c rei.c
これが使えるようになるためには、lapack_alpha.a と lsblaspii1.2c_11.99.a と libF77.aが/usr/local/lib/に存在しないといけません。ここで、 lapack_alpha.a は私の場合のLAPACKのライブラリ名ですので、違う名前かもしれ ません。また、lsblaspii1.2c_11.99.a はBLASですが、これはPentiumII用に最適 化されたものです。これは、私の本に書いてあるサイトからダウンロードできます (e-mailで先方にほしい旨伝えて置き場所を教えてもらう手続きが必要ですがすぐに 返事がきます)。また、遅くはなりますが、標準のBLASでもかまいません。libF77.a もclapackをコンパイルした際、生成されています。こうして、名前は違うかもしれ ませんが、対応するものを/usr/local/lib/にコピーしてください。 そして、Makefileとrei.cのおいてあるディレクトリでmakeとしてみてください。うまく コンパイルできたら、./reiで実行できるはずです。
(結果)
お忙しい中にも関わらず,早速のご返事 まことに恐縮です. 先生のアドバイス通り作業致しましたところ, 正常にコンパイル,実行できました!(\^o^/ やったー!!) lapack_LINUX.a, libF77.a, blas_LINUX.a (私の環境ではこのような名前になっています) を /usr/local/lib に移動させ,添付の Makefile で rei.c をコンパイルすると,./rei が生成され 実行できました. clapack 自体のコンパイルは正常に 終了していたようです. 計算結果もきちんと正確な値が求まっております. これから計算速度の比較等をしていきたいと 思います.
今回は、OctaveとScilabをWindowsにインストールしてみた。 Scilabのほうは、普通にインストールプログラムを実行するだけで 非常に簡単にインストールができた。一方、OctaveをWindows上で 動かすために、初めにCygwinをインストールし、その後Octaveを インストールすることになる。しかし、Webで調べていったところ http://matlinks.sourceforge.net/ というサイトに、Cygwin上でOctaveを動かすためのインストーラーが あったために、これもまた非常に簡単にインストールができた。 しかし、後に丸めを行うためのoctfileを作成するときに includeするためのヘッダファイルが少なかったために、あらためて Cygwinをインストールする必要があると思われる。