From: Hidetoshi NAGAI Date: 2005-10-12T11:37:23+09:00 Subject: [ruby-list:41258] Re: ruby/Tk でプルダウンリスト 永井@知能.九工大です. From: Takeshi Honda Subject: [ruby-list:41250] Re: ruby/Tk でプルダウンリスト Date: Tue, 11 Oct 2005 23:19:52 +0900 Message-ID: <20051011141949.14197.qmail@web2805.mail.bbt.yahoo.co.jp> > 環境はwin XP+cygwinで、rubyもcygwinの物を使っています。ruby 1.8.2 > (2004-12-25) [i386-cygwin] です。 > ActiveTcl8.4.11.1.175185-win32-ix86.exeを > /cygdrive/c/bin/tclにインストールし、 > LD_LIBRARY_PATH=/cygdrive/c/bin/tcl/lib > のようにパスを通し、以下のスクリプトを実行したところ、そ > の下のエラーがでました。 > > どうしたらtk拡張を使えるようになるでしょうか? cygwin 環境には詳しくないので間違っているかもしれませんが, cygwin の ruby が ActiveTcl の DLL を正しく読み込めるという前提で 考えます. まずは ActiveTcl のライブラリを見に行っているかどうかを確認ください. ruby -r tk -e 'p Tk::TK_PATCHLEVEL' と実行した場合,インストールされた ActiveTcl を使っていれば "8.4.11" と出力されるはずです. もしこれが cygwin の Tcl/Tk のバージョンを示しているなら, ActiveTcl のライブラリを使っていないことになります. cygwin の ruby の tcltklib がライブラリファイルの名前を決め打ちで 読み込んでいるのかもしれません. 名前が決め打ちであるなら,ActiveTcl の tcl*.dll と tk*.dll とを cygwin のものに強引に付けかえる (元の cygwin のものは一旦名前を 変えておく) ことでなんとか騙せる可能性もあります (後述の環境変数 設定も必要かもしれません). 騙せない場合 (というか,どちらかと言えばこちらを勧めますが), tcltklib の再コンパイルが必要になります. Ruby のソースアーカイブを持ってきて展開すると,1.8 系なら ext/tcltklib/README.ActiveTcl というファイルが存在するはずです. このファイルに ActiveTcl を使う場合の configure オプションの 指定例もありますので,参考にしてください. なお,Ruby 1.8.2 (2004-12-25) から現在までに bug fix 等も それなりの量でなされていますので,できれば CVS から 最新のソース (最も最近の修正は 2005-10-04 に行っています) を 入手された方がいいかもしれません. その際,もし Ruby 1.8.3 には切り替えたくないということでしたら, Ruby 1.8.2 のソースにおいて ext/tcltklib と ext/tk とを 最新のものに入れ替えてコンパイルするのでも大丈夫だと思います. ActiveTcl のライブラリを見ているにも関わらず ActiveTcl の拡張が 使えないのでしたら,Tcl/Tk のライブラリパスが cygwin のものに なっているのかもしれません. その場合は,環境変数の TCL_LIBRARY と TK_LIBRARY とを設定すれば うまく読んでくれる可能性があります. 断定できず「かもしれない」ばかりで申し訳ありませんが, お試しいただけますと幸いです. -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp