正常情况下最新的ruby都是不带tcl/tk选项编译的,所以我们在运行tcl/tk代码时都会发生找不到tk库的错误。解决办法很简单只要以tcl/tk选项编译ruby即可。

这里以ubuntu 15.04为例,前提是先安装rvm;如果不用rvm也可以,不过要自己下载源代码回来编译,不如一步到位用rvm省事。

首先到ActiveTcl官网下载tcl:

http://www.activestate.com/activetcl/downloads

注意不要选择最新的8.6.x,因为可能兼容性有问题,需要下载8.5.x或8.4.x:

解压后直接运行install.sh,如果要安装到特定目录可能要用sudo安装。一路next之后,ActiveTcl和Tk就装好了。

接下来可以使用rvm安装最新的ruby,别忘了加上tcl/tk选项支持:

rvm reinstall ruby-2.2.2 --with-tcl --with-tk

如果安装失败,很有可能是tcl/tk环境没有设置好;可以进入对应ruby的源代码目录:

wisy@wisy-pad:~/.rvm/src/ruby-2.2.2/ext/tk$ pwd
/home/wisy/.rvm/src/ruby-2.2.2/ext/tk
ruby extconf.rb

最后一句命令的输出可以看到到底是由于神马原因rvm reinstall ruby失败。如果你的源代码文件里没有ext文件夹表示源代码不完整,需要下载完整的ruby源代码。

(PS:rvm不同版本ruby的可执行文件放在~/.rvm/rubies目录下;不同版本ruby的源代码放在~/.rvm/src目录下)

接下来我们可以写一个测试代码看看:

#!/usr/bin/ruby

require 'tk'

msg="你好!中国"
root=TkRoot.new{title msg}
label_msg=TkLabel.new(root){
    text  msg
    pack :padx=>2,:pady=>2,:side=>'top'
    font "arial 20 bold"
}

Tk.mainloop

使用 ./1.rb运行,如果没问题则应该有窗口出现:

最后我们还要做点rvm的“收尾”工作:

rvm use ruby-2.2.2  #设置当前使用的ruby版本
rvm use 2.2.2 --default #设置ruby的默认版本
rvm docs generate #生成rdoc文档

(PS: Ruby/Tk 扩展

TkButton、TkCanvas 等都是 Tk 的核心小部件。除此之外,还有很多第三方的小部件,我们称它们为“Tk 扩展”。这些第三方的 Tk 小部件往往比核心小部件更加强大。既然有“Tk 扩展”,就必然有“Ruby/Tk 扩展”与之对应。您可以在 Ruby 的安装目录中找到它们:目录“RUBY_INSTALL_DIR\lib\ruby\RUBY_VERSION_NUMBER\tk”中是核心 Ruby/Tk 代码,而目录“RUBY_INSTALL_DIR\lib\ruby\RUBY_VERSION_NUMBER\tkextlib”中是 Ruby/Tk 扩展代码。 )

linux下ruby使用tcl/tk编程环境设置的更多相关文章

  1. Linux下搭建 Cocos2d-x-2.1.4 编译环境

    [tonyfield 2013.09.04 ] 参考 Linux下搭建 Cocos2d-x-2.1.4 编译环境 导入 HelloCpp 例程 1. Java 入口 HelloCpp.java Hel ...

  2. linux下C语言socket网络编程简例

    原创文章,转载请注明转载字样和出处,谢谢! 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到client的连接后,发送数据给client:clie ...

  3. linux 下安装jdk及配置jdk环境图解

    linux 下安装jdk及配置jdk环境图解 一:先检測是否已安装了JDK 运行命令: # rpm -qa|grep jdk  或   # rpm -q jdk  或  #find / -name j ...

  4. Linux下Jdk的安装和jdk环境变量的设置

    我们在Linux下安装系统软件的时候,经常遇到一些系统环境变量配置的问题.什么是环境变量?如何定制环境变量?我将在下面做一些介绍.一.什么是环境变量?Linux是一个多用户的操作系统.多用户意味着每个 ...

  5. Linux下Jenkins+git+gradle持续集成环境搭建

    Linux下Jenkins+git+gradle持续集成环境搭建 来源:IT165收集  发布日期:2014-08-22 21:45:50 我来说两句(0)收藏本文   一.项目介绍 和 linux ...

  6. linux下lamp.sh一键配置lamp环境流程

    linux下lamp.sh一键配置lamp环境流程 一.总结 一句话总结: 2.将网站从github上clone到/data/www/网站域名/ 3.更改网站目录权限:chown -R apache: ...

  7. Linux下Hadoop2.7.3集群环境的搭建

    Linux下Hadoop2.7.3集群环境的搭建 本文旨在提供最基本的,可以用于在生产环境进行Hadoop.HDFS分布式环境的搭建,对自己是个总结和整理,也能方便新人学习使用. 基础环境 JDK的安 ...

  8. Python编程环境设置

    第1节.Python编程环境设置 一.sublime相关 1.sublime REPL插件安装 (1)安装 先打开插件安装面板:ctrl+shift+P 输入install ,选择Package Co ...

  9. linux下生成core dump文件方法及设置

    linux下生成core dump文件方法及设置    from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...

随机推荐

  1. Android 深入理解Loader机制 让APP轻装上阵

    本文简书同步发布,谢谢关注. http://blog.csdn.net/sk719887916/article/details/51540610 Android开发者都经历过APP UI开发不当 会造 ...

  2. XML Schema

    XML Schema 是基于 XML 的 DTD 替代者. XML Schema 描述 XML 文档的结构. XML Schema 语言也称作 XMLSchema 定义(XML Schema Defi ...

  3. Ubuntu下安装GTK环境

    要生成C图形界面的程序,得安装GTK环境     安装GTK环境只要安装一个gnome-core-devel就可以了,里面集成了很多其他的包.除此之外还要转一些其他的  东西,如libglib2.0 ...

  4. Fork And Join框架初探

    首先,关于Fork And Join框架的入门资料我觉得最好的是: Java线程(十一):Fork/Join-Java并行计算框架 本文参考了这篇文章 Fork/Join框架的核心类是ForkJoin ...

  5. Java四大名著下载大全(中文+英文)

    转自:http://www.blogjava.net/kuuyee/archive/2013/06/03/400084.html 抽时间整理了一下Java四大名著,分享出来方便大家学习! Note 郑 ...

  6. Android的stateListDrawable,layerDawable,clipdrawable,AnimationDarwable介绍-android学习之旅(五十五)

    StatelistDrawable资源 代码示例 <?xml version="1.0" encoding="utf-8"?> <select ...

  7. android-async-http详解

    android-async-http开源项目可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来非常简单,关于android-async-http开源项目的介绍内容来自于官方:http://lo ...

  8. UNIX环境高级编程——可靠信号与不可靠信号

    在早期的UNIX中信号是不可靠的,不可靠在这里指的是:信号可能丢失,一个信号发生了,但进程却可能一直不知道这一点. 现在Linux 在SIGRTMIN实时信号之前的都叫不可靠信号,这里的不可靠主要是不 ...

  9. Linux多线程实践(8) --Posix条件变量解决生产者消费者问题

    Posix条件变量 int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); int pthread_co ...

  10. C++ Primer 有感(命名的强制类型转换)

    C++四种强制类型转换的方法以及其应用场合,之前有看过这个知识点,但是,面试的时候怎么想也就没有写的很全面,于是,这里整理一下: C++中的四种强制类型转换除了具有C语言强制类型转换的功能外,还可提供 ...