Ruby要求'tk'产生LoadError:没有这样的文件要加载 - tk

时间:2014-01-02 00:55:32

标签: ruby tk

我无法成功获得要求'tk'的红宝石。我正在使用rvm,ruby 2.0.0,ActiveTcl-8.6和Ubuntu 12.04 LTS。我已经运行了ActiveTcl提供的 wish ,它似乎正在运行。

我查看了RVM网站http://rvm.io/integration/tk和几个StackOverflow问题,例如RVM Ruby with TK installation (OSX)

我已尝试 rvm在不同版本的ruby上多次重新安装2.0.0 --enable-shared --enable-pthread --with-tk --with-tcl ,但没有成功。< / p>

有什么想法吗?

当我运行irb并执行 require'tk'时,我会收到以下信息:

LoadError: cannot load such file -- tk
from /home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from (irb):2
from /home/brooks/.rvm/rubies/ruby-2.0.0-p353/bin/irb:12:in `<main>'

当这种方法有效时,我认为你应该 true 返回。

我没有尝试过其他任何事情,主要是因为我无法弄清楚还有什么可做的。我一直在研究需要如何工作并使用 ruby​​ -e'检查加载路径$:'我得到了

[brooks@ubuntu:~/sites/depot]$ruby -e 'puts $:'
/home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0
/home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/x86_64-linux
/home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby
/home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/vendor_ruby/2.0.0
/home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/vendor_ruby/2.0.0/x86_64-linux
/home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/vendor_ruby
/home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0
/home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/x86_64-linux

我认为这看起来像你期望的那样。抱歉格式化,我是编辑的新手。

跟进这个路径问题的想法,我在我的文件中找到了tk.rb,并在irb中尝试了以下内容:

2.0.0-p353 :003 > require '/home/brooks/.rvm/src/ruby-2.0.0-p353/ext/tk/lib/tk'   
LoadError: cannot load such file -- tcltklib
from /home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/brooks/.rvm/src/ruby-2.0.0-p353/ext/tk/lib/tk.rb:6:in `<top (required)>'
from /home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/brooks/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from (irb):3
from /home/brooks/.rvm/rubies/ruby-2.0.0-p353/bin/irb:12:in `<main>'

所以现在tk.rb文件中的需要'tcltklib'导致问题。这似乎证实了$ PATH或$ load_path存在一些问题。但搜索文件tcltklib.rb没有任何结果。有一个tcltklib.c文件。


我还尝试了一些其他的东西。在通过rvm更仔细地读取ruby安装的输出之后,有一个关于X11 lib未安装的警告,并且在ruby构建之后Tk不会处于活动状态。我做了 sudo apt-get install libx11-dev 然后 rvm重新安装2.0.0 --enable-shared --enable-pthread --with-tk --with-tcl 再次。这次在irb 要求'tk'导致核心转储。我又试了一次,但它确实奏效了。然后我运行了一个简短的ruby脚本,它也使用 require'tk'。它也是核心倾销,但经过几次尝试后工作。现在它的成功与否,有时是有效的,有时是核心转储。

3 个答案:

答案 0 :(得分:6)

没有onty sudo apt-get install tk就足够了,但你还需要安装下面的库文件,这样你的问题才能解决,你再也不会看到这个错误了。

$ sudo apt-get install libtcltk-ruby

感谢 KK

答案 1 :(得分:3)

我遇到了同样的情况。我试着跟踪它如下:

$cd ~/.rvm/src/ruby-2.1.1/ext/tk
$ruby extconf.rb

然后:

 check functions.checking for ruby_native_thread_p() in ruby.h... yes
.checking for rb_errinfo() in ruby.h... yes
.checking for rb_safe_level() in ruby.h... yes
.checking for rb_hash_lookup() in ruby.h... yes
.checking for rb_proc_new() in ruby.h... yes
.checking for rb_obj_untrust() in ruby.h... yes
.checking for rb_obj_taint() in ruby.h... yes
.checking for rb_set_safe_level_force() in ruby.h... yes
.checking for rb_sourcefile() in ruby.h... yes
.checking for rb_thread_alive_p() in ruby.h... no
.checking for rb_thread_check_trap_pending() in ruby.h... yes
.check struct members.checking for struct RArray.ptr in ruby.h... no
.checking for struct RArray.len in ruby.h... no
.check libraries.checking for t_open() in -lnsl... no
.checking for socket() in -lsocket... no
.checking for dlopen() in -ldl... yes
.checking for log() in -lm... yes
Use ActiveTcl libraries (if available).
Search tclConfig.sh and tkConfig.sh..
Ignore "/opt/ActiveTcl-8.6/lib/tclConfig-shared.sh" (unsupported version of Tcl/Tk).
Ignore "/opt/ActiveTcl-8.6/lib/tclConfig.sh" (unsupported version of Tcl/Tk).
..............................
Fail to find [tclConfig.sh, tkConfig.sh]
Use X11 libraries (or use TK_XINCLUDES/TK_XLIBSW information on tkConfig.sh).
checking for XOpenDisplay() in -lX11... yes

Search tcl.h.checking for tcl.h... no
.Search tk.h.checking for tk.h... no
.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.

请看最后一行:“目前,不支持Tcl / Tk8.6。”

要解决:

  1. 卸载active-tcl8.6.1
  2. 安装8.5或8.4,将安装路径添加到$PATH
  3. rvm reinstall ruby-2.1.1 --with-tcl --with-tk

答案 2 :(得分:2)

在Mac OSX 10.6.8上,将active-tcl降级到8.5版对我有用。

  1. 卸载active-tcl8.6

    请参阅:http://docs.activestate.com/activetcl/8.5/at.install.html

    在指示无效后,请阅读指示下方的注意

      

    注意:在Snow Leopard及更高版本上,安装了卸载脚本   下   /Library/Frameworks/Tcl.framework/Versions//Resources/Scripts/uninstall   代替。 Apple重新组织了收据存储的目录   从中删除了第三方文件的任何空间。

    但这也不会奏效,所以请看这里:

    Uninstall Active TCL Mac

  2. 安装active-tcl8.5

    见这里:http://www.activestate.com/activetcl/downloads

    我不需要对我的$ PATH做任何事情。

  3. rvm reinstall ruby-2.1.2 --with-tcl --with-tk