Okada Hiroshi の blog

typo が多いです

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つあります。 + 環境変数等を設定するため、コマンドプロンプトは VisualStudio をインストールすると作成される Visual Studio 2008 コマンド プロンプトから開いた。*2 + そのまま、コンパイルインストールすると msvcr90-ruby18.dll となってしまい例えば vim から呼び出すときに都合がわるいので変更しました。 + zlib の make 時にマニュフェストを埋め込まないので、手動で埋め込みました。 + openssl のコンパイルperl が必要だったので ActivePerl をインストールしました。 + 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 してもクリアされない情報があるようで、展開したてのソースからやりなおさないと成功しませんでした。

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

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