OkadaHiroshiの日記 このページをアンテナに追加 RSSフィード

2008-08-17

[] Microsoft Visual Studio 2008 で ruby-1.8.6-p287 をコンパイル

Ruby を使うにあたって今まではバイナリーをインストールしていましたが、

今回 Visual Studio 2008 でコンパイル、インストールしてみました。

ext/zlib, ext/openssl, rubygems も入れてみました。

自分の備忘のためと、誰かの参考になればとにインストール時のメモを書いておきます。

今回インストールした環境は以下のとおりです。

  • Windows Vista Home Premium (Service Pack 1) 32bit
  • Visual Studio 2008 Standard Edition
  • ダウンロードしたファイルの解凍には LhaForge *1 を使用しました。
  • 展開したソースファイルは C:\src に置きました。
  • ruby は C:\ruby にインストールしました。

ポイントは5つあります。

  1. 環境変数等を設定するため、コマンドプロンプトは VisualStudio をインストールすると作成される Visual Studio 2008 コマンド プロンプトから開いた。*2
  2. そのまま、コンパイルインストールすると msvcr90-ruby18.dll となってしまい例えば vim から呼び出すときに都合がわるいので変更しました。
  3. zlib の make 時にマニュフェストを埋め込まないので、手動で埋め込みました。
  4. openssl のコンパイルに perl が必要だったので ActivePerl をインストールしました。
  5. ext/openssl の作成時にコンパイルエラーが出るので、CFLAGS を調整しました。

Ruby 本体のインストール

  • Ruby 公式サイト http://www.ruby-lang.org/ja/ から 1.8系の最新リリース ruby-1.8.6-p287.tar.gz をダウンロードしました。
  • ソースを解凍して c:\src\ruby-1.8.6-p287\ 以下に配置しました。
  • c:\src\ruby-1.8.6-p287\win32\README.win32 を読みました。
  • Visual Studio 2008 コマンド プロンプトを起動して、次のようにしました。
C:\Program Files\Microsoft Visual Studio 9.0\VC>cd \src\ruby-1.8.6-p287
C:\src\ruby-1.8.6-p287>win32\configure.bat
  • エディタで Makefile の次の部分を修正しました。
前 # RUBY_SO_NAME = $(RT)-$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR)
後 RUBY_SO_NAME = msvcrt-$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR)
  • 再びコマンドプロンプトに戻って次のようにしました。
C:\src\ruby-1.8.6-p287>nmake 
C:\src\ruby-1.8.6-p287>nmake test
C:\src\ruby-1.8.6-p287>nmake DESTDIR=c:\ruby install

次の作業を行なる前にシステムの環境変数 Path に C:\ruby\bin を追加し、一旦コマンドプロンプトを閉じました。

ext/zlib

  • zlib 公式サイト zlib http://zlib.net/ より zlib-1.2.3.tar.gz をダウンロードしました。
  • C:\src\zlib-1.2.3 以下にソースを展開しました。
  • 再び Visual Studio 2008 コマンド プロンプトを起動して、次のようにしました。
C:\Program Files\Microsoft Visual Studio 9.0\VC>cd \src\zlib-1.2.3
C:\src\zlib-1.2.3>nmake -f win32\Makefile.msc
C:\src\zlib-1.2.3>mt -manifest zlib1.dll.manifest -outputresource:zlib1.dll;2
C:\src\zlib-1.2.3>copy zlib1.dll c:\ruby\bin
C:\src\zlib-1.2.3>cd \src\ruby-1.8.6-p287\ext\zlib
C:\src\ruby-1.8.6-p287\ext\zlib>ruby extconf.rb --with-zlib-include=c:\src\zlib-1.2.3 --with-zlib-lib=c:\src\zlib-1.2.3
C:\src\ruby-1.8.6-p287\ext\zlib>nmake
C:\src\ruby-1.8.6-p287\ext\zlib>nmake install

マニュフェストを埋め込む件 http://kazuwe.tdiary.net/20080726.html が参考になりました。ありがとうございます。

ActivePerl

openssl をコンパイルするためには、perl が必要とのことで、ActivePerl をインストールしました。

ページ http://www.activestate.com/Products/activeperl/index.mhtml から Get ActivePerl のリンクをたどり

activeperl 5.10.0.1003 for Windows (x86) MSI をダウンロードしてインストールしました。

ext/openssl

  • http://www.openssl.org/source/ より openssl-0.9.8h.tar.gz をダウンロードしました。
  • C:\src\openssl-0.9.8h に展開したソースを置きました。
  • Visual Studio 2008 コマンド プロンプトを起動して、次のようにしました。
C:\Program Files\Microsoft Visual Studio 9.0\VC>cd \src\openssl-0.9.8h
C:\src\openssl-0.9.8h>perl Configure VC-WIN32 --prefix=c:/ruby
C:\src\openssl-0.9.8h>ms\do_ms.bat
C:\src\openssl-0.9.8h>nmake -f ms\ntdll.mak
C:\src\openssl-0.9.8h>nmake -f ms\ntdll.mak test
C:\src\openssl-0.9.8h>nmake -f ms\ntdll.mak install
C:\src\openssl-0.9.8h>cd \src\ruby-1.8.6-p287\ext\openssl
C:\src\ruby-1.8.6-p287\ext\openssl>ruby extconf.rb --with-openssl-include=c:\ruby\include --with-openssl-lib=c:\ruby\lib

このままだとコンパイルが通らないので、Makefile を書き換えました。

前 CFLAGS   =  -MD  -O2b2xty-  
後 CFLAGS   =  -MD -DWIN32_LEAN_AND_MEAN -O2b2xty-  

以下のように make してインストールしました。

C:\src\ruby-1.8.6-p287\ext\openssl>nmake
C:\src\ruby-1.8.6-p287\ext\openssl>nmake install

rubygems

  • http://rubyforge.org/frs/?group_id=126 より rubygems-1.2.0.tgz をダウンロードしました。
  • C:\src\rubygems に展開したソースを配置しました。
  • Visual Studio 2008 コマンド プロンプトを起動して、次のようにしました。
- C:\Program Files\Microsoft Visual Studio 9.0\VC>cd \src\rubygems-1.2.0
- C:\src\rubygems-1.2.0>ruby setup.rb

追記

一応、gem install --remote twittre4r とかで twitter4r をインストールして動作していますが、何か間違いや不具合があったら教えてください。

openssl のアセンブラソースのコンパイルには失敗しました。一旦コンパイルに失敗すると nmake clean してもクリアされない情報があるようで、展開したてのソースからやりなおさないと成功しませんでした。

*1http://claybird.hp.infoseek.co.jp/garage/lhaforge/index.html

*2:普通にコマンドプロンプロを起動した場合は C:\Program Files\Microsoft Visual Studio 9.0\VC\で vcvarsall.bat x86 を実行する。