鳳鳴は祖父の俳号

日記 メモ そんなの

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文字関係を確認しておくか。