无法在 Ruby 中加载 tk [英] Not able to load tk in Ruby

查看:24
本文介绍了无法在 Ruby 中加载 tk的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 Ruby 中运行一些 tk 代码,但它不起作用.以下是错误:

I am trying to run some tk code in Ruby, but it is not working. Following is the error:

iuser@debian:~$ irb
irb(main):001:0> require 'tk'
LoadError: cannot load such file -- tk
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from (irb):1
    from /usr/bin/irb:11:in `<main>'
irb(main):002:0> 

我正在使用安装了 Ruby 和 Tk 的 Debian-9 Linux:

I am working on Debian-9 Linux with Ruby and Tk installed:

Package                 Installed       Previous        Now             State
=======================-===============-===============-===============-=====
tk                      8.6.0+9         8.6.0+9         8.6.0+9         install
ruby                    1:2.3.3         1:2.3.3         1:2.3.3         install

问题出在哪里,如何解决?感谢您的帮助.

Where is the problem and how can this be solved? Thanks for your help.

如评论中所述,我尝试使用 gems 安装 tk,但它没有用:

As mentioned in comments, I tried to install tk with gems, but it did not work:

$ sudo gem install tk
[sudo] password for cardio: 
Fetching: tk-0.2.0.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing tk:
    ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.3.0/gems/tk-0.2.0/ext/tk
/usr/bin/ruby2.3 -r ./siteconf20170906-9548-1db359q.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.3.0/gems/tk-0.2.0 for inspection.
Results logged to /var/lib/gems/2.3.0/extensions/x86-linux/2.3.0/tk-0.2.0/gem_make.out

我在安装 ruby​​-dev 包(用于头文件)后再次尝试,但仍然失败(带有很长的消息):

I tried again after installing ruby-dev package (for header files), but still it failed (with a long message):

$ sudo gem install tk
Building native extensions.  This could take a while...
ERROR:  Error installing tk:
    ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.3.0/gems/tk-0.2.0/ext/tk
/usr/bin/ruby2.3 -r ./siteconf20170906-15971-qfma2e.rb extconf.rb
Configure options for Ruby/Tk may be updated.
So, delete files which depend on old configs.
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
checking for ruby_enc_find_basename() in ruby.h... yes
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
Specified Tcl/Tk version is ["8.6", "8.6"]
Use ActiveTcl libraries (if available).
Search tclConfig.sh (in /usr/lib/i386-linux-gnu/tcl8.6/tclConfig.sh) and tkConfig.sh (in /usr/lib/i386-linux-gnu/tk8.6/tkConfig.sh).
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... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/usr/bin/$(RUBY_BASE_NAME)2.3
    --enable-shared
    --with-tk-old-extconf
    --without-tk-old-extconf
    --with-tk-old-extconf
    --without-tk-old-extconf
    --with-ActiveTcl
    --without-ActiveTcl
    --with-tk-shlib-search-path
    --without-tk-shlib-search-path
    --with-tcltkversion
    --with-tcl-build-dir
    --without-tcl-build-dir
    --with-tk-build-dir
    --without-tk-build-dir
    --with-tcl-config
    --without-tcl-config
    --with-tk-config
    --without-tk-config
    --with-tclConfig-dir
    --with-tkConfig-dir
    --with-tclConfig-file
    --without-tclConfig-file
    --with-tkConfig-file
    --without-tkConfig-file
    --with-tcllib
    --with-tklib
    --with-tcl-dir
    --without-tcl-dir
    --with-tk-dir
    --without-tk-dir
    --with-tcl-include
    --with-tk-include
    --with-tcl-lib
    --with-tk-lib
    --with-tcltk-framework
    --without-tcltk-framework
    --with-tcl-framework-dir
    --without-tcl-framework-dir
    --with-tk-framework-dir
    --without-tk-framework-dir
    --with-tcl-framework-header
    --without-tcl-framework-header
    --with-tk-framework-header
    --without-tk-framework-header
    --with-X11
    --without-X11
    --with-X11-dir
    --without-X11-dir
    --with-X11-include
    --without-X11-include
    --with-X11-lib
    --without-X11-lib
    --enable-tcltk-stubs
    --disable-tcltk-stubs
    --enable-tcl-h-ver-check
    --disable-tcl-h-ver-check
    --enable-tk-h-ver-check
    --disable-tk-h-ver-check
    --enable-mac-tcltk-framework
    --disable-mac-tcltk-framework
    --enable-tcltk-framework
    --disable-tcltk-framework
    --enable-pthread
    --disable-pthread
    --enable-tcl-thread
    --disable-tcl-thread
    --enable-space-on-tk-libpath
    --disable-space-on-tk-libpath
    --with-nsllib
    --without-nsllib
    --with-socketlib
    --without-socketlib
    --with-dllib
    --without-dllib
    --with-mlib
    --without-mlib
    --with-tcl-build-dir
    --without-tcl-build-dir
    --with-tk-build-dir
    --without-tk-build-dir
    --with-tcltkversion
    --with-ActiveTcl
    --without-ActiveTcl
    --enable-space-on-tk-libpath
    --disable-space-on-tk-libpath
    --enable-tcltk-stubs
    --disable-tcltk-stubs
    --with-tcltk-stubs
    --without-tcltk-stubs
    --with-tcl-dir
    --without-tcl-dir
    --with-tcl-include=${tcl-dir}/include
    --with-tcl-lib=${tcl-dir}/lib
    --with-tk-dir
    --without-tk-dir
    --with-tk-include=${tk-dir}/include
    --with-tk-lib=${tk-dir}/lib
    --with-tclConfig-file
    --without-tclConfig-file
    --with-tkConfig-file
    --without-tkConfig-file
    --with-tclConfig-dir
    --with-tkConfig-dir
    --with-tk-shlib-search-path
    --without-tk-shlib-search-path
    --with-tklib
    --with-tcllib
    --with-X11
    --without-X11
    --with-X11-dir
    --without-X11-dir
    --with-X11-include
    --without-X11-include=${X11-dir}/include
    --with-X11-lib
    --without-X11-lib=${X11-dir}/lib
    --with-X11-lib
    --without-X11-lib
    --with-X11lib
    --without-X11lib

Warning:: cannot find X11 library. tcltklib will not be compiled (tcltklib is disabled on your Ruby. That is, Ruby/Tk will not work). Please check configure options. If your Tcl/Tk don't require X11, please try --without-X11.
Can't find X11 libraries. 
So, can't make tcltklib.so which is required by Ruby/Tk.

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /var/lib/gems/2.3.0/extensions/x86-linux/2.3.0/tk-0.2.0/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.3.0/gems/tk-0.2.0 for inspection.
Results logged to /var/lib/gems/2.3.0/extensions/x86-linux/2.3.0/tk-0.2.0/gem_make.out

推荐答案

标准 Ruby GUI 工具包 Tk 的绑定需要一些技巧才能安装在 Ubuntu 上https://saveriomiroddi.github.io/Installing-ruby-tk-bindings-gem-on-ubuntu/

The bindings for the standard Ruby GUI toolkit, Tk, need some trickery in order to be installed on Ubuntu https://saveriomiroddi.github.io/Installing-ruby-tk-bindings-gem-on-ubuntu/

这篇关于无法在 Ruby 中加载 tk的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆