GNU APL1.0 MacOSX10.8での作業メモ 5
エラーメッセージをよく見てみると:
/System/Library/Frameworks/vecLib.framework/Headers/clapack.h:4689:5: note: candidate function not viable: no known conversion from 'integer *' (aka 'long *') to '__CLPK_integer *' (aka 'int *') for
1st argument
int zgelsy_(__CLPK_integer *m, __CLPK_integer *n, __CLPK_integer *nrhs,
とあるので、ヘッダファイルは読み込めている。LApack.ccの最初に
#include
や
#include "/System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Versions/Current/Headers/clapack.h"
と追加したんだけど関係なかった。
LApack.ccをよく見てみると、doublecomplexをdoublerealを使って定義しているとこがある。ここがかぶっている。コメントアウトする。直上にtypedef integerがあるけど、以下すべて __CLPK_integerに書き換えるので無視する。
60 /*
61 /// A Floating point number.
62 typedef double doublereal;
63
64 /// A complex number.
65 struct doublecomplex
66 {
67 double r; ///< The real part.
68 double i; ///< The imaginary part.
69 };
70 */
extern "C" の所は全部コメントアウト。前回書き換えたのはごまかしでしかなかった。
以降、
integer → __CLPK_integer
doublereal → __CLPK_doublereal
doublecomplex __CLPK_doublecomplex
に書き換え。関数の引数の中も注意。
やった、これでLApack.ccをクリアした。
次はmain.cc だけどつづく。
clang: warning: argument unused during compilation: '-rdynamic'
main.cc:92:67: error: excess elements in struct initializer
static struct sigaction new_control_C_action = { control_C, 0, 0, 0, 0 };
^
main.cc:104:66: error: excess elements in struct initializer
static struct sigaction new_segfault_action = { seg_fault, 0, 0, 0, 0 };
^
main.cc:114:72: error: excess elements in struct initializer
static struct sigaction new_USR1_action = { signal_USR1_handler, 0, 0, 0, 0 };
^
ところで、LApackの呼び出し部分だけど、必要なライブラリを参照しとかなきゃいかんのかな。一応やっておく。
./configure CFLAGS="-rdynamic -framework Accelerate" LDFLAGS="-L/System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Versions/Current"
configureで以下のエラーがあった。
./configure: line 5880: gt_INTL_MACOSX: command not found
あと、Ubuntu上でmakeしたらなんの問題もなくでけた(README-1-prerequisitesを読んで事前にライブラリを用意しておく)。こちらはAPL文字関係を確認しておくか。