それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Cygwin向けlinuxのクロスコンパイル環境でruby-1.9をコンパイルした

Ruby1.9が欲しかったのでビルドした。Cygwinでビルドすると恐ろしく時間かかってオーバーナイトなので飽きる。

LinuxCygwin向けにコンパイルしてみました

必要なファイル・ディレクトリを準備

cd ~
wget ftp://ftp.iij.ad.jp/pub/lang/ruby/1.9/ruby-1.9.2-p180.tar.gz
tar zxvf ruby-1.9.2-p180.tar.gz
mkdir /home/takuya/ruby-1.9.2-p180/build/ruby
mkdir /home/takuya/ruby-1.9.2-p180/build/

ビルドする。まずMakeFileを作る*1

cd ~/ruby-1.9.2-p180/build
../configure CC=i686-pc-cygwin-gcc\
             --prefix=/home/takuya/ruby-1.9.2-p180/build/ruby\
             --host=i686-pc-cygwin\
             --build=i686-pc-linux\
             ac_cv_func_setpgrp_void=yes\
             --enable-shared   --disable-install-doc

makeする

make -j3
make install

DLLを追加してWindowsに持っていく

cygwin/bin/cyggcc_s-sjlj-1.dll ruby/bin/cyggcc_s-sjlj-1.dll #クロスコンパイル環境のDLL
tar cvzf ruby.tgz ruby

Windowから使ってみる

scp 192.168.2.5:~/ruby-1.9.2-p180/build/ruby.tgz .
tar xvzf ruby.tgz
cd ruby/bin

実行結果:出来た。ちょっと感動。

takuya@letsnote:~/ruby/bin$ ./ruby -v
ruby 1.9.2p180 (2011-02-18) [i386-cygwin]

できあがった。binファイルはこんな感じ

ls -l
合計 7937
-rwxr-xr-x+ 1 takuya None  373782 3月  15 16:09 cyggcc_s-sjlj-1.dll
-rwxr-xr-x+ 1 takuya None 1970176 3月  15 14:31 cygruby191.dll
-rwxr-xr-x+ 1 takuya None   45381 3月  15 16:09 cygssp-0.dll
-rwxr-xr-x+ 1 takuya None 5662670 3月  15 16:09 cygstdc++-6.dll
-rwxr-xr-x+ 1 takuya None    4428 3月  15 14:24 erb
-rwxr-xr-x+ 1 takuya None     577 3月  15 14:24 gem
-rwxr-xr-x+ 1 takuya None     349 3月  15 14:24 irb
-rwxr-xr-x+ 1 takuya None    1279 3月  15 14:24 rake
-rwxr-xr-x+ 1 takuya None     728 3月  15 14:24 rdoc
-rwxr-xr-x+ 1 takuya None     104 3月  15 14:24 ri
-rwxr-xr-x+ 1 takuya None   24026 3月  15 14:36 ruby.exe
-rwxr-xr-x+ 1 takuya None   24026 3月  15 14:36 rubyw.exe
-rwxr-xr-x+ 1 takuya None     278 3月  15 14:24 testrb


cygwinでビルドするのと比べるとなにか安定感がある。

参考

rubyのようにconfigure で指定できないときは環境変数に入れておけばいい。

export CROSS_COMPILE=i686-pc-cygwin-
export CC=${CROSS_COMPILE}"gcc"
export CXX=${CROSS_COMPILE}"g++" 
http://cboard.cprogramming.com/c-programming/127796-cross-compile-php.html

2011-09-13 補足

PATHは通ってる前提.
私の場合.以前のコンパイルで、次の場所にクロスコンパイル環境を作って居る

export PREFIX=/home/takuya/build/cygwin #prefix を決める
export PATH=${PREFIX}/bin:${PATH} #クロスコンパイルのインストール先へパスを通す

ロスコンパイル環境の作成はこっち
http://d.hatena.ne.jp/takuya_1st/20110314/1300132009

*1:ロスコンパイルのパスは補足参照