研究メモ
LAPACKとBLASをMac OS Xで利用する場合には以下をする。
- ヘッダファイル: #include
- フレームワーク: /System/Library/Frameworks/Accelerate.framework
- GCCのオプション: -framework Accelerate
LACAMLを利用するにはさらにvecLibが必要になるかもしれないと書かれているが、このリンクは切れており、ぼくの Mac には /System/Library/Framewords/Accelerate.frameworks/vecLib.framework が存在する。最近の OS には含まれているということか?
吉田くんがビルドに苦労していたので、びくびくしていたのだけど、とりあえず lacaml のソースをダウンロードして Makefile を見てみたら、Mac OS X に対応している雰囲気。設定ファイルの g2c → f2c と変更したら make 一発で問題なし。
そこで、godi を使って conf-lacaml で g2c → f2c として、test。問題なし。godi-lacaml も test, build して問題なし。さきほどダウンロードした lacaml のパッケージに含まれる例題をコンパイルしてみる。lin_eq_comp 以外はすべて成功。実行結果はよく分らないけれども、ともかく動いている様子。まだ落し穴があるんだろうか???
もしかして、インストールはうまくいったけれど、自分のプログラムをコンパイルできなかったということ?example を見たところ、以下のような感じになってました。
OCAMLMAKEFILE = $(HOME)/lib/godi/share/OCamlMakefile INCDIRS = ../../lib LIBDIRS = $(INCDIRS) LIBS = bigarray lacaml ifneq ($(shell uname),Darwin) OCAMLBLDFLAGS = -dllpath $(INCDIRS) endif SOURCES = blas.ml RESULT = blas -include $(OCAMLMAKEFILE)
これはバイトコードコンパイルの例だったので、念のため native-code でコンパイルしたら、
/usr/bin/ld: Undefined symbols: _ilaenv_ _isamax_ _saxpy_ _scopy_ _sgbmv_ 中略 _zgeev_ _zgesvd_ _zlansy_ _zpocon_ _zsycon_ collect2: ld returned 1 exit status Error during linking
ははぁ、これでメゲたんだ。前述の gcc のオプションのことがあるので、Makefile に以下を追加したら、コンパイル・実行に成功。これで、ocaml/Mac で BLAS が使える。めでたい。でも、早く見てあげればよかった。
ifeq ($(shell uname),Darwin) LDFLAGS = -framework Accelerate endif