`
rubynroll
  • 浏览: 202117 次
  • 性别: Icon_minigender_1
  • 来自: Wgt
社区版块
存档分类
最新评论

交叉编译Ruby傻瓜指南

阅读更多

最近看到有人在交叉编译ruby的时候似乎碰到了许多问题(http://www.iteye.com/topic/322718 )。其实交叉编译ruby原本应该是很简单的一个过程,希望这个“傻瓜指南”可以让新手也能够轻而易举地进行操作。

注 1: 本文以Arm-linux为目标平台,其他平台需要调整到对应的工具链。
注 2: 本文的编译平台是Linux (Debian/Ubuntu),如果在Cygwin下进行交叉编译可能会遇到困难。编译之前请确定bison和flex这两个程序已安装好。

 

交叉编译ruby-1.8.6:


第1步: 准备

  mkdir -p ~/build
  mkdir -p ~/bin

 

第2步: 下载交叉编译工具

  cd ~/bin
  wget http://www.codesourcery.com/gnu_toolchains/arm/portal/package3696/public/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
  tar -jxvf arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
 


第3步: 下载ruby源码

  cd ~/build
  wget ftp://www.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6.tar.bz2
  tar -jxvf ruby-1.8.6.tar.bz2
 


第4步: 打补丁
  把本文附件中的ruby-configure.patch.tar.bz2和fakeruby.patch.tar.bz2下载到~/build中,并解压:

  tar -jxvf ruby-configure.patch.tar.bz2
  tar -jxvf fakeruby.patch.tar.bz2
  cd ruby-1.8.6
  patch < ../ruby-configure.patch
  patch < ../fakeruby.patch

 


第5步: 配置

  cd ~/build/ruby-1.8.6
  export CC=~/bin/arm-2008q3/bin/arm-none-linux-gnueabi-gcc
  autoreconf
  mkdir -p /opt/arm-linux-ruby
  ./configure --host=arm-linux --target=arm-linux --disable-pthread --enable-shared --prefix=/opt/arm-linux-ruby 2>&1 | tee config.out



第6步: 编译,安装

  make 2>&1 | tee make.out
  make install 2>&1 | tee install.out


大功告成。现在,在/opt/arm-linux-ruby下可以看到交叉编译好的ruby,你可以根据需要自己再裁减,或者用strip来对可执行文件与库文件进行“廋身”,然后下载到目标板上即可。

 

 

 

交叉编译ruby-1.8.7-p72:

 

 

1.  首先,要对codesourcery的交叉编译工具进行一个小改动:

把本文附件fix-compiler.rb.tar.bz2解开,然后运行:

    ruby fix-compiler.rb ~/bin/arm-2008q3/bin
 

 

2.  对ruby源码打补丁时,除了文中提到的两个补丁外,还需打上extmk.patch

 

 

3.  在配置1.8.7-p72之前,把交叉工具的路径添入当前路径:

export PATH=~/bin/arm-2008q3/bin:$PATH
 

 

其余步骤和1.8.6版本一样不再重复。

 

交叉编译ruby-1.9.1-p0:

 

基本步骤与交叉编译ruby-1.8.7-p71一样,只是那个extmk.patch不用打了,1.9.1里面已经修正了这个错误。ruby-configure.patch和fakeruby.patch这两个补丁仍然需要打。真不敢相信, setpgrp (被ruby-configure.patch修正) 和fake-ruby(被fakeruby.patch修正) 这两个bug从ruby 1.8.2开始就存在,一直到ruby 1.9都还没被修正

 

另外还需注意的是,在交叉编译ruby-1.9之前,编译机器上必须先安装ruby-1.9,确保在编译之前ruby -v输出是版本1.9。

 

 

-----------------------------------

Acknowledgement: 本文采用的'ruby-configure.patch'补丁来自于Debian。

 

 

 

 

分享到:
评论
1 楼 geyiju 2011-08-03  
 

相关推荐

Global site tag (gtag.js) - Google Analytics