研究メモ

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