2012年11月13日
RubyとWindowsとzlib
先日,Ruby 1.9.3-p327がリリースされました.さっそくWindowsマシンにインストールしました.
ってWindowsはサーバじゃなくてクライアントマシンだな...まあとりあえず「自宅サーバ」のカテゴリに入れておきます.
公式サイトで提供しているwin32のバイナリは更新が1.9.2で停止しているようなので,自分でビルドします.Visual Studioを使ってビルドしてしまったので,検索でたどり着いた人のお役には立てないかもしれませんが.
私の環境では,zlib,libyaml,opensslのライブラリが必要になるようです.まあこれらは先日ビルドしたばかりなので,今回はそれを使い回すことにします.あとは特に問題もなくビルドが通りました.
...で,わざわざ記事にしたのは,以前は余計な手間を加えていたからです.えーと,zlib.hをインクルードするときには,あらかじめZLIB_WINAPIをdefineしておくとどこかで聞いていたので,かつてはそのようにしていました.ところがそうするとRubyのビルドが通らないのです.対症療法として,Ruby側のzlibのソースに__stdcallを勝手に付け加えて対応していました(せめてWINAPIにしろよー).
これ,STDCALLな呼び出し規約に従っているWindowsアプリケーション(WindowsAPIがSTDCALLなので,多くの場合はアプリケーションもそうなっている,ということ?)に対応するためなんですね.ところがRubyはCDECLに従っているっぽいので,そういう改変は不要である,という結論を得ることができました.
...実はサーバマシンでインストールに失敗しているんですよねー
そっちの方も何か発見があれば書き込んでみます.
公式サイトで提供しているwin32のバイナリは更新が1.9.2で停止しているようなので,自分でビルドします.Visual Studioを使ってビルドしてしまったので,検索でたどり着いた人のお役には立てないかもしれませんが.
- ソースコードを公式サイトからダウンロードして展開.
- 必要なライブラリのヘッダファイルを展開先のincludeディレクトリに,libファイルをルートディレクトリにコピー.
- VSコマンドプロンプトを開き,ルートディレクトリにcdして,configure\win32→nmake→nmake test→nmake install.
私の環境では,zlib,libyaml,opensslのライブラリが必要になるようです.まあこれらは先日ビルドしたばかりなので,今回はそれを使い回すことにします.あとは特に問題もなくビルドが通りました.
...で,わざわざ記事にしたのは,以前は余計な手間を加えていたからです.えーと,zlib.hをインクルードするときには,あらかじめZLIB_WINAPIをdefineしておくとどこかで聞いていたので,かつてはそのようにしていました.ところがそうするとRubyのビルドが通らないのです.対症療法として,Ruby側のzlibのソースに__stdcallを勝手に付け加えて対応していました(せめてWINAPIにしろよー).
これ,STDCALLな呼び出し規約に従っているWindowsアプリケーション(WindowsAPIがSTDCALLなので,多くの場合はアプリケーションもそうなっている,ということ?)に対応するためなんですね.ところがRubyはCDECLに従っているっぽいので,そういう改変は不要である,という結論を得ることができました.
...実はサーバマシンでインストールに失敗しているんですよねー
そっちの方も何か発見があれば書き込んでみます.
Posted by あるでん茶 at 21:36│Comments(0)
│自宅サーバ