Shiro Kawai
shiro****@lava*****
2004年 1月 25日 (日) 18:51:13 JST
From: えんどう <yasuy****@javao*****> Subject: [Gauche-devel-jp] Re: define-cclassについて Date: Sun, 25 Jan 2004 18:19:58 +0900 > ScmSysFlock 型がどこにも定義されていないように見えるのですが、 > この型はどう定義されるのでしょうか...? ext/fcntl/gauche/fcntl.h にあります。 > > $ gosh -I. > > gosh> (dynamic-load "mysql") > > #t > > gosh> (d <mysql-handle>) > > *** ERROR: unbound variable: <mysql-handle> > > Stack Trace: > > _______________________________________ > > gosh> (d <mysql-res>) > > *** ERROR: unbound variable: <mysql-res> > > Stack Trace: > > _______________________________________ > > > >これは、<mysql-handle>等が定義されてるモジュールをimportしてないだけ、 > >もしくはそのモジュールから<mysql-handle>がexportされていないだけ、 > >とかいう可能性はありますか? > > <mysql-handle> の定義は mysql.so にあるので、 > mysql.so を dynamic-load すれば<mysql-handle> が Gauche 側に見えると > 思っていたのですが、 mysql.soをdynamic-loadすれば、<mysql-handle>の束縛はどこかの モジュールに挿入されます。どこに挿入されるかは、.soファイルの初期化 関数中で明示的に指定してあるはずです (Scm_InitBuiltinClassの最後の 引数)。 そのモジュールの束縛が、現在のモジュールから見えるかどうかは、 通常のimport/exportでコントロールされます。 > dbd.mysql モジュールを書き、その中で (dynamic-load "mysql")を行い、 > <mysql-handle> をexportしてみました。 > > mysql.so があるディレクトリーで gosh -I. で Gauche を起動し、 > (use dbd.mysql) のあと (d <mysql-handle>) を試してみました。 > > $ gosh -I. > gosh> (add-load-path "/home/yasuyuki/kahua/dbi") > ("/home/yasuyuki/kahua/dbi" "/home/yasuyuki/kahua/dbd" "." "/usr/local/ > share/gauche/site/lib" "/usr/local/share/gauche/0.7.3/lib") > gosh> (use dbd.mysql) > (#<module dbd.mysql> #<module gauche.interactive>) > gosh> (d <mysql-handle>) > *** ERROR: unbound variable: <mysql-handle> > Stack Trace: > _______________________________________ > > dbd.mysql モジュールでは (dynamic-load "mysql") だけではダメで、 > 何か別の定義が必要なのでしょうか...? まず、dbd.mysqlモジュールの中で<mysql-handle>が見えているかどうか 確かめてみて下さい。 gosh> (with-module dbd.mysql <mysql-handle>) これで見えていれば、export/importの方の問題、見えていなければ、 mysql.so自身が<mysql-handle>を正しいモジュールに束縛していない ということになります。 --shiro