2014/12/26(金) [n年前の日記]
#1 [dxruby][ruby] Windows版Rubyの拡張ライブラリをビルドする方法が分からない
Ayame.so + Ayame.dll を使えば Windows版 Ruby上でoggやmp3やwavの再生ができるのですが。しかし、Ayame.so は曲再生時のループ開始位置に必ず0を渡して呼んでしまうので、今現在の Ayame.dll (2014/08/29版)が、ループ開始位置の指定も可能かどうか、動作確認できなくて。
そこで、Ayame.so のソースをちょっとだけ修正してビルドして *.so を作ってテストできないものかと。ループ開始位置として0を渡してるところに、適当なサンプルポイント値を決め打ちで書いてやるだけで、該当機能が働くかどうかぐらいは確認できるやろと。働いてると確認さえできれば、DXRuby作者様に「この機能、今は使えるから対応してくださいプリーズ」とお願いできるかもと。
しかし、それら拡張ライブラリのビルド手順が分からない。何が必要になるのかも分からない。
手元の環境では _RubyInstaller + DevKit を使ってるので、gem install xxxx をした際、ソースからビルドして拡張ライブラリをインストールできたりしてるわけで。つまり、DevKit までインストールしてあれば、それだけで拡張ライブラリもビルドできるんじゃないの、もしも他に何か必要になるとしても、せいぜい MinGW/MSYS をインストールしとけばイケるんじゃないのと想像したのですけど。
しかしこれが、ググってもそれらしい情報が出てこなくて。何スかコレ。そのへんは秘伝の類なの? 一子相伝の技なの? 皆でNDAでも結んでの? …検索キーワードが悪いだけでしょうけど。
ちなみに、Ayame.dll を VS2013 Community 版や VS2008 Express でビルドできないかなと試してみたのですけど、「void は bool にならねえよ」とエラーが出てきて何が何やら。DXRuby作者様が「Ayameさんはビルドすらできないから、手をつけるのは諦めた」と言ってたのはこういうことかと…。 *1
そこで、Ayame.so のソースをちょっとだけ修正してビルドして *.so を作ってテストできないものかと。ループ開始位置として0を渡してるところに、適当なサンプルポイント値を決め打ちで書いてやるだけで、該当機能が働くかどうかぐらいは確認できるやろと。働いてると確認さえできれば、DXRuby作者様に「この機能、今は使えるから対応してくださいプリーズ」とお願いできるかもと。
しかし、それら拡張ライブラリのビルド手順が分からない。何が必要になるのかも分からない。
手元の環境では _RubyInstaller + DevKit を使ってるので、gem install xxxx をした際、ソースからビルドして拡張ライブラリをインストールできたりしてるわけで。つまり、DevKit までインストールしてあれば、それだけで拡張ライブラリもビルドできるんじゃないの、もしも他に何か必要になるとしても、せいぜい MinGW/MSYS をインストールしとけばイケるんじゃないのと想像したのですけど。
しかしこれが、ググってもそれらしい情報が出てこなくて。何スかコレ。そのへんは秘伝の類なの? 一子相伝の技なの? 皆でNDAでも結んでの? …検索キーワードが悪いだけでしょうけど。
ちなみに、Ayame.dll を VS2013 Community 版や VS2008 Express でビルドできないかなと試してみたのですけど、「void は bool にならねえよ」とエラーが出てきて何が何やら。DXRuby作者様が「Ayameさんはビルドすらできないから、手をつけるのは諦めた」と言ってたのはこういうことかと…。 *1
◎ Windows版Rubyの拡張ライブラリをビルドする方法が少し分かった気がする。 :
ちょっとだけ進展。
_Rubyの拡張ライブラリを作ってみよう! - ser1zw's blog
を参考にしながら試してみたら、*.so ができた、かもしれない。やっぱり DevKit があればビルドできる、かもしれない。たぶん。自信無いけど。環境は Windows7 x64 + RubyInstaller(mingw) 1.9.3 + DevKit。
C++ の時はどうするんだろう。Ayame.so は C++ で書かれているわけで。何にせよ Ayame.so のソースに #include <dsound.h> と書かれてるので、やっぱり DirectX SDK を入れないといけない予感。
- DOS窓で、DevKitインストールフォルダ\devkitvars.bat を実行。DevKitが入ってる場所が PATH に追加されて、gcc や make が使えるようになる。
- foo.c を書く。
- extconf.rb を書く。
- ruby extconf.rb を実行。makefile が作られる。
- make を実行。makefile に従って foo.c がコンパイルされて、foo.so が作られる。
- テスト用の Rubyスクリプトに、require_relative 'foo' を書いて実行。foo.c の中の Init_foo() が呼ばれる。
C++ の時はどうするんだろう。Ayame.so は C++ で書かれているわけで。何にせよ Ayame.so のソースに #include <dsound.h> と書かれてるので、やっぱり DirectX SDK を入れないといけない予感。
*1: もっとも自分の場合、ソレ以前に DirectX SDK とやらをインストールしないといけないのかなという気もするけど、これまたどのバージョンを入れればいいのやら。
[ ツッコむ ]
以上です。