mieki256's diary



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

Windows版Rubyの拡張ライブラリをビルドする方法が少し分かった気がする。 :

ちょっとだけ進展。 _Rubyの拡張ライブラリを作ってみよう! - ser1zw's blog を参考にしながら試してみたら、*.so ができた、かもしれない。やっぱり DevKit があればビルドできる、かもしれない。たぶん。自信無いけど。環境は Windows7 x64 + RubyInstaller(mingw) 1.9.3 + DevKit。
  1. DOS窓で、DevKitインストールフォルダ\devkitvars.bat を実行。DevKitが入ってる場所が PATH に追加されて、gcc や make が使えるようになる。
  2. foo.c を書く。
  3. extconf.rb を書く。
  4. ruby extconf.rb を実行。makefile が作られる。
  5. make を実行。makefile に従って foo.c がコンパイルされて、foo.so が作られる。
  6. テスト用の Rubyスクリプトに、require_relative 'foo' を書いて実行。foo.c の中の Init_foo() が呼ばれる。
ここまでできた。Cを使ってRubyの拡張ライブラリを書く際は、こんな感じでやっていけばいいのか…。

C++ の時はどうするんだろう。Ayame.so は C++ で書かれているわけで。何にせよ Ayame.so のソースに #include <dsound.h> と書かれてるので、やっぱり DirectX SDK を入れないといけない予感。

*1: もっとも自分の場合、ソレ以前に DirectX SDK とやらをインストールしないといけないのかなという気もするけど、これまたどのバージョンを入れればいいのやら。

以上です。

過去ログ表示

Prev - 2014/12 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project