永井@知能.九工大です.

From: Takeshi Honda <moecho21 / yahoo.co.jp>
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