Example 47-2にはバグがあり,古い書き方が残っている.
interp->result = "Usage: random ?range?";
のように直接Tcl_interpのフィールドを操作するのではなく,本文中にあるように
Tcl_SetResult(interp, "Usage: random ?range?", TCL_STATIC);
とした方が安全.
文字列は
buffer
という名前で宣言しているので,buf
は誤り.リンクオプションは,
-bundle
でも-dylib
でもよい.tclのソースのmacosx/READMEには-dylibのみunload
可能とあるが,どうしたらよいかは分からない.MacPortsのTclでは,
libtcl.dylib
にリンクするが,Mac OS X添付のTclでは,-framework Tcl -framework System
が使える.自分でソースからコンパイルするときは,ソースのmacosxで./configure
のオプションに--enable-framework
を付け加える.ところで,Leopard添付のtclshでは共有ライブラリの読み込みができたが,MacPortsのtcl-8.5.6では
Random_SafeInit, Random_SafeUnload, Random_Unload
をソースに定義していないとエラーとなる.
Random_SafeInit(Tcl_Interp *interp) {
return Random_Init(interp);
}
int
Random_Unload(Tcl_Interp *interp, int flags) {
return TCL_OK;
}
int
Random_SafeUnload(Tcl_Interp *interp, int flags) {
return TCL_OK;
}
Ubuntuでやってみたが,これらは必要ないので,MacでTcl-8.5を使うときに発生する問題のようだ.
MacPortsの
tclsh
(tclを+universalでインストール)では,ロード後コマンドを実行したら,malloc
でエラーが出た.ActiveTclや/usr/localにインストールしたものは大丈夫だった.MacPortsでも+universal +threadsとしたら,正常に動作するようになった.
0 件のコメント:
コメントを投稿