永井@知能.九工大です. # まとめて返信させていただきますが,ご容赦ください. From: Ryutaro Amano <wn9r-amn / asahi-net.or.jp> Subject: [ruby-list:45198] Re: ソース:インストール:MacOSX10.3.9 Date: Sun, 6 Jul 2008 08:08:15 +0900 Message-ID: <07A24EA9-8B6C-4AD5-91DB-CDB47D5E48ED / asahi-net.or.jp> > module TkCore; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end > require 'tk' > > で、エラーが出ないのを確認しました。 > うちのPowerPCMac + 10.5.4 において > AquaTclTk-8.5.2および8.5.2をソースからインストールの環 > 境で、どちらも上記のやり方でエラーなしでした。 確認をありがとうございます. > --------------------------------------------------------- > require 'tcltklib' > ip = TclTkIp.new > ip._eval('after 1 {destroy .}') > TclTkLib.mainloop > ip.delete > ip = nil # for GC > require 'tk' > --------------------------------------------------------- > > は、以下のようになります。 > > :10: [BUG] Segmentation fault > ruby 1.9.0 (2008-06-20 revision 17482) [powerpc-darwin9.3.0] From: wei <weimayamiew / gmail.com> Subject: [ruby-list:45196] Re: ソース:インストール:MacOSX10.3.9 Date: Sat, 5 Jul 2008 23:43:15 +0900 Message-ID: <CA7038B5-80A1-46E9-B456-2EEE17089B7E / gmail.com> > 試した所、一瞬Windowが出て > > Tcl_Release couldn't find reference for 0x107c10 > Abort > > と出てすぐに終了しました。 あ゛... すみません.別のバグを掘り出したみたいですね.(^_^; 多分,インタープリタの破棄時に不必要にインタープリタの Tcl_Release を してしまっているということだと思いますので,修正します. とりあえず,テストコードから --------------------------------------------------------- ip.delete ip = nil # for GC --------------------------------------------------------- の2行を取り除いて試してみるとどうなるでしょうか? > ちなみに10.5.4上で、ruby-1.9.0-2を以下のオプショ > ンでインストールすると > > ./configure --enable-shared --enable-pthread > 普通に require 'tk' で問題ありません。この場合は、デ > フォルトでインストールされている8.4.7が呼ばれています。 Tcl/Tk のソースを見てみると,問題となっている個所は 8.4.9 と 8.4.10 の間で変更されています. 動くか動かないかの差はそれが理由だったようですね. 8.4.10 以降では,event loop は main thread でしか 動かせないということになるようです. とはいえ,8.4.7 では動いているということは, きっと何かの方法自体は存在するのでしょうね. その方法が,TkAqua 側で何とかしてもらうしかどうしようもないのか, あるいは Ruby/Tk 側で何とかすることが可能なものなのかは 恥ずかしながらまだ分からないのですが... -- 永井 秀利 (nagai / ai.kyutech.ac.jp) 九州工業大学 大学院情報工学研究院 知能情報工学研究系