はじめに
Ruby tkを利用しようとしたところ、エラーがでて使えなかった。
% irb
irb(main):001:0> require 'tk'
LoadError: cannot load such file -- tk
from /home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from (irb):1
from /home/tsu-nera/.rbenv/versions/2.1.0/bin/irb:11:in `'
この解決方法についてメモします。
Ruby/TkはTcl/TkのツールキットをRubyから利用するライブラリ。
Rubyの標準ライブラリに入っている。
Ruby/Tk 参考Links
tk-devを入れてみる
もともと自分のPCに入っていたRubyはrbenvを使ってビルドした。 どうも、Ubuntu(Mint)環境では、tk-devをあらかじめインストールしておかないと、Rubyのビルド時にRuby/Tkがビルドされないようだ。
ということで、
sudo apt-get install tk-dev
他にも、いろいろツールが追加でインストールされる。
libxss-dev tcl tcl-dev tcl-lib tcl8.5-dev tk tk-lib tk8.5 tk8.5-dev tk8.5-lib x11proto-scrnsaver-dev
これで、Rubyを再インストールしてみる。
% rbenv uninstall ruby-2.1.0
% rbenv install ruby-2.1.0 -v
これでOKだろうとおもったけど、やっぱりエラーした。
ビルドログをみると、やっぱりスキップされてしまう。
configuring tk
...........
check struct members..
check libraries....
Use ActiveTcl libraries (if available).
Search tclConfig.sh and tkConfig.sh.....................
WARNING: found "/usr/lib/tclConfig.sh", but cannot find valid Tcl library for the tclConfig.sh. So, ignore it.
WARNING: found "/usr/lib/tkConfig.sh", but cannot find valid Tk library for the tkConfig.sh. So, ignore it.
..........
Fail to find [tclConfig.sh, tkConfig.sh]
Use X11 libraries (or use TK_XINCLUDES/TK_XLIBSW information on tkConfig.sh).
Search tcl.h..
Search tk.h..Search Tcl library..........
Search Tcl library..........
Warning:: cannot find Tcl library. tcltklib will not be compiled (tcltklib is disabled on your Ruby. That is, Ruby/Tk will not work). Please check configure options.
Can't find proper Tcl/Tk libraries. So, can't make tcltklib.so which is required by Ruby/Tk.
If you have Tcl/Tk libraries on your environment, you may be able to use them with configure options (see ext/tk/README.tcltklib).
At present, Tcl/Tk8.6 is not supported. Although you can try to use Tcl/Tk8.6 with configure options, it will not work correctly. I recommend you to use Tcl/Tk8.5 or 8.4.
Failed to configure tk. It will not be installed.
configuring tk/tkutil
Failed to configure tk/tkutil. It will not be installed.
configuring win32
Failed to configure win32. It will not be installed.
configuring win32ole
Failed to configure win32ole. It will not be installed.
Ubuntu特有のバグだったもよう
バグだった模様。バッチを発見。
- Japanese user list of the Ruby programming language ()
- http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/55165
しかし、パッチの当て方がわからない。30分で挫折。
途方にくれていたが、ズバリ解決する記事を発見!
sudo apt-get remove tk-dev
sudo apt-get install tk8.4-dev tcl8.4-dev
sudo ln -sfn /usr/lib/tcl8.4/tclConfig.sh /usr/lib/tclConfig.sh
sudo ln -sfn /usr/lib/tk8.4/tkConfig.sh /usr/lib/tkConfig.sh
このとおりに実施したら、なんとなくうまくいったっぽい。
configuring tk
........
check struct members..
check libraries....
Use ActiveTcl libraries (if available).
Search tclConfig.sh and tkConfig.sh...............................
Valid [tclConfig.sh, tkConfig.sh] are found in [["/usr/lib", "/usr/lib"]]
Use [tclConfig.sh, tkConfig.sh] == ["/usr/lib/tclConfig.sh", "/usr/lib/tkConfig.sh"]
Use X11 libraries (or use TK_XINCLUDES/TK_XLIBSW information on tkConfig.sh).
Find Tcl/Tk libraries. Make tcltklib.so which is required by Ruby/Tk.
configuring tk/tkutil
成功、よかった ^_^;
% irb
irb(main):001:0> require 'tk'
=> true