Cygwin1.5にRuby1.7をソースからビルド
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
ぼちぼち、Rubyソースコード完全解説を読むことにトライしようかと思い、解説で使われているRuby1.7を、WindowsXP上に入れているCygwin環境にソースからインストールしてみた。
以下から、該当バージョンのRubyのダウンロードができ、ビルドの方法も説明されています。
『Rubyソースコード完全解説』サポートページ
rubyビルドガイド
Cygiwinシェル(bash)から、configure, make, make install
Cygiwinシェルを起動して、
$ mkdir ~/src $ cd ~/src $ wget http://www.loveruby.net/ja//rhg/ar/ruby-rhg.tar.gz $ tar xfvz ./ruby-rhg.tar.gz $ cd ./ruby-rhd $ ./configure --enable-shared --prefix=/home/username --program-suffix=-1.7 $ make $ make install
という方針で進める。
Windowsにcygwinを入れると、cygwinディレクトリが、UNIXでいう”/”ディレクトリとなる。
ユーザーディレクトリは、/home/username なので、Rubyのソースは、/home/username/src に、Rubyのインストールは/home/username 下に入れることにしました。
Cygwin、UX/4800など一部のプラットフォームではconfigureの段階で –enable-sharedオプションを付けないとリンクに失敗する。 –enable-sharedというのはrubyのほとんどを共有ライブラリ (libruby.so)としてコマンドの外に出すオプションである。
とあるので、configureのオプションに–enable-sharedをつける。
インストールディレクトリを、configure の –prefix オプションにて指定する。
サフィックスに-1.7をつけることで、ruby-1.7.exeと実行ファイルができるので、ほかバージョンをインストールする際にも区別ができます。
configureまでは順調に進みましたが、次のmakeの段階でエラー発生。
make のエラー対策
make コマンドで、math.c、missing/strftime.c、ext/win32ole/win32ole.c の3つでエラー発生。
それぞれを、以下のように修正しました。エラー文の下に参考にしたURLを併記。
* math.c too few arguments to function `nan' エラー http://japanese-document-of-gcc-errors.googlecode.com/files/gcc-errors.pdf http://jarp.does.notwork.org/diary/200702b.html http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/40309 183行目 #if defined __CYGWIN__ #define log(x) ((x) < 0.0 ? nan() : log(x)) #define log10(x) ((x) < 0.0 ? nan() : log10(x)) #endif ↓ #if defined __CYGWIN__ #define log(x) ((x) < 0.0 ? 1.0 : log(x)) #define log10(x) ((x) < 0.0 ? 1.0 : log10(x)) #endif * missing/strftime.c 'timezone' redeclared as different kind of symbol エラー http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/32536 189行目 extern char *timezone(); ↓ /* extern char *timezone(); */ 451行目 strcpy(tbuf, timezone()); ↓ /* strcpy(tbuf, timezone()); */ *tbuf = 0; * ext/win32ole/win32ole.c [win32ole.o] エラー error: `GUIDKIND_DEFAULT_SOURCE_DISP_IID' undeclared http://cvs.cacanet.org/WEB/members/fujino/archives/000187.html http://www.katontech.com/diary/?date=20040518#p07 24行目 追加 #include <olectl.h>
1つ目(math.c)、2つ目(missing/strftime.c)の修正は、力技・・・。学習のためなので、とりあえずmake通すための処置としました。
この修正後、make distclean で一回削除したあと、configureからやり直し、make, make install できた。
動かして確認
$ cygcheck -c cygwin Cygwin Package Information Package Version Status cygwin 1.5.25-15 OK $ cd bin $ ls cygwin-ruby-1.717.dll* irb* ruby-1.7.exe* $ ruby-1.7 -e "puts RUBY_VERSION" 1.7.3
と、一通り入ったようです。
さって、1日1章くらいの目標で、Rubyソースコード完全解説を読んでいこう。
追記。irb
irbも試したところ、shebangのパスが違うところに通っていたので修正。
$ ./irb irb(main):001:0> RUBY_VERSION => "1.8.7"
ともとから入っていた他のRubyインタプリタにirbのパスが通っていた。
ので、/home/username/bin/irb のファイルを開き1行目のshebangのパスを変更。
#!/usr/bin/env ruby
↓
#!/home/username/bin/ruby-1.7.exe
と修正したところ、
$ ./irb irb(main):001:0> RUBY_VERSION "1.7.3"
とRuby1.7.3でirbが動作しました。
- - 関連記事 -
- GNU GLOBALでソースコードを可視化
- irbで対話的にRuby実行
- Aptana Studio + RadRailsプラグイン(Eclipse系Ruby・IDE)を試す。NetBeansとの比較
- NetBeans IDEでRuby開発
- Rubyの真偽値・nilとfalseだけが偽
- Rubyの魅力
- データ構造を確認するpメソッドとppメソッド
- requireで別ファイルを取り込む
- Rubyはオブジェクト指向のインタープリタ言語
- 文字列とprint, puts, pなどの表示・出力メソッド
- Hello world ! Hello, Ruby !
- Rubyを勉強する環境構築(E-TextEditor)
- Rubyのto_sメソッドで2進数、8進数、16進数、10進数の変換