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 とやらをインストールしないといけないのかなという気もするけど、これまたどのバージョンを入れればいいのやら。
[ ツッコむ ]
#2 [prog] DirectX SDKをインストール
以下の記事によると、DirectX11 以降を使うだけなら Visual Studio 2013 等をインストールする際に一緒に入れてくれるらしいのだけど。DirectX9 を使いたいなら、別途インストールしないといけないらしくて。
_VisualC++とDirectX SDKの設定 最新情報
なので、DXSDK_Jun10.exe をDLしてインストールすることに。
_Download DirectX Software Development Kit from Official Microsoft Download Center
しかし、このままインストールしようとするとエラーが出る。
_DirectX SDKインストール時に”S1023エラー”が出る時の対処法
Visual C++ 2010 (x86|x64) Redistributable Package の新しい版が既に入ってるのがいかんらしい。なので、以下の手順でインストール作業を行った。
以下から、vcredist_x??.exe をDLしてインストールした。SP1 版までインストールしないと最新にならなかった。
_Download Microsoft Visual C++ 2010 再頒布可能パッケージ (x86) from Official Microsoft Download Center
_Download Microsoft Visual C++ 2010 再頒布可能パッケージ (x64) from Official Microsoft Download Center
_Download Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86) from Official Microsoft Download Center
_Download Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x64) from Official Microsoft Download Center
本当にインストールできたかどうか、以下の記事を参考にしてサンプルをビルドして確認。
_DirectX SDKのインストールとサンプルの実行 - プログラム初心者による3Dゲーム制作勉強日記 - livedoor Blog(ブログ)
DirectX Sample Browser を起動して、適当な何かを「Install Project」。VC++ 2008 Express のプロジェクトフォルダ内を指定すれば、そこに一式がコピーされる。VC++ 2008 Express でプロジェクトを開いて(.slnを選択)、ビルド。それっぽいウインドウが出た。DirectX SDK はインストールできてるっぽい。
巷の解説記事では、VC++ 20?? に DirectX のヘッダやライブラリの場所を設定しないといけないらしいのだけど、自分の場合は自動で設定してくれていた模様。
_VisualC++とDirectX SDKの設定 最新情報
なので、DXSDK_Jun10.exe をDLしてインストールすることに。
_Download DirectX Software Development Kit from Official Microsoft Download Center
しかし、このままインストールしようとするとエラーが出る。
_DirectX SDKインストール時に”S1023エラー”が出る時の対処法
Visual C++ 2010 (x86|x64) Redistributable Package の新しい版が既に入ってるのがいかんらしい。なので、以下の手順でインストール作業を行った。
- コントロールパネルから、Visual C++ 2010 x?? Redistributable Package の2つ(x86 と x64)をアンインストール。
- DirectX SDK をインストールする。
- コントロールパネルから、Visual C++ 2010 x?? Redistributable Package の2つを、またアンインストール。
- 最新の Visual C++ 2010 x?? Redistributable Package をDLしてインストール。
以下から、vcredist_x??.exe をDLしてインストールした。SP1 版までインストールしないと最新にならなかった。
_Download Microsoft Visual C++ 2010 再頒布可能パッケージ (x86) from Official Microsoft Download Center
_Download Microsoft Visual C++ 2010 再頒布可能パッケージ (x64) from Official Microsoft Download Center
_Download Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86) from Official Microsoft Download Center
_Download Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x64) from Official Microsoft Download Center
本当にインストールできたかどうか、以下の記事を参考にしてサンプルをビルドして確認。
_DirectX SDKのインストールとサンプルの実行 - プログラム初心者による3Dゲーム制作勉強日記 - livedoor Blog(ブログ)
DirectX Sample Browser を起動して、適当な何かを「Install Project」。VC++ 2008 Express のプロジェクトフォルダ内を指定すれば、そこに一式がコピーされる。VC++ 2008 Express でプロジェクトを開いて(.slnを選択)、ビルド。それっぽいウインドウが出た。DirectX SDK はインストールできてるっぽい。
巷の解説記事では、VC++ 20?? に DirectX のヘッダやライブラリの場所を設定しないといけないらしいのだけど、自分の場合は自動で設定してくれていた模様。
[ ツッコむ ]
#3 [prog] msys-minttyをインストール
msys 上で mintty をインストールしたのでメモ。
msys.bat でDOS窓(?)を起動。
mintty - と打てば起動。「-」をつけると何かが変わるらしいがよくわからない。
左上のアイコンをクリックするとメニューの中に「Option」があるので、それを選べば設定が変更できる。設定ファイルは、 ~/.minttyrc として保存される。自分の環境の場合、環境変数 HOME に C:\home\ユーザ名 を設定しているので、C:\home\ユーザ名\.minttyrc として保存された。
フォントとして、Migu 1M を指定。したのだけど、なんだか「t」の文字がおかしい。Windows上だから、Linuxデスクトップのように文字が綺麗に出ないんだよな…。日本語部分はアレになるけど、Consolas にでもしておこう…。
インストールはしてみたものの。mintty 上で git 等を使うと不具合があるとの話も見かけたので、基本的には msys.bat を起動したその上で何か作業をしたほうがいいのかもしれない。のだけど。msys.bat で開いたDOS窓の中では、文字が消えずに残ったりして、コレもコレでよろしくないような。
文字化けしたり、BackScapeキーが効かなくて困ったけど、~/.vimrc を書いたら解決した。
msys.bat でDOS窓(?)を起動。
mingw-get update mingw-get upgrade mingw-get install minttyまたは、以下でもいい? のかな?
mingw-get install msys-mintty
mintty - と打てば起動。「-」をつけると何かが変わるらしいがよくわからない。
左上のアイコンをクリックするとメニューの中に「Option」があるので、それを選べば設定が変更できる。設定ファイルは、 ~/.minttyrc として保存される。自分の環境の場合、環境変数 HOME に C:\home\ユーザ名 を設定しているので、C:\home\ユーザ名\.minttyrc として保存された。
フォントとして、Migu 1M を指定。したのだけど、なんだか「t」の文字がおかしい。Windows上だから、Linuxデスクトップのように文字が綺麗に出ないんだよな…。日本語部分はアレになるけど、Consolas にでもしておこう…。
インストールはしてみたものの。mintty 上で git 等を使うと不具合があるとの話も見かけたので、基本的には msys.bat を起動したその上で何か作業をしたほうがいいのかもしれない。のだけど。msys.bat で開いたDOS窓の中では、文字が消えずに残ったりして、コレもコレでよろしくないような。
◎ ついでに msys-vim もインストール。 :
mingw-get install msys-vimvim で起動。
文字化けしたり、BackScapeキーが効かなくて困ったけど、~/.vimrc を書いたら解決した。
set nocompatible set encoding=shift_jis set incsearch set ignorecase set nohlsearch set showmatch set showmode set title set ruler set autoindent set smartindent set tabstop=4 set shiftwidth=4 set noexpandtab set backspace=indent,eol,start set mouse=a
[ ツッコむ ]
#4 [zatta][neta] ひつじとねむり
「眠りたいなら羊を数えよ」というソレは、sheep(羊) と sleep(眠り) の言葉遊びだろうなと思うのだけど、そのまま日本語にして持ってきても意味不明だよなと唐突に思ったり。
_マイクの前
で
_「本日は晴天なり」と言い続けてる日本人
と通ずる滑稽さ、あるいは、アメリカの国土に合わせた設計の原発を何故その設計なのか考えずにコピーして地震と津波で大事故を起こした日本人の愚かしさが ―― 「どうしてそうなったか」を考えないで表面的なコピーしかせず、しかもそのことに何の疑問を持たないまま延々と不自然な形で運用し続ける日本人という民族のトホホぶりがそこにあるように思えてきて。であればせめてここは一つ日本語に合わせて「ひつじ」「ねむり」の接続を一度分離してから別の何かと繋げてそれらしい形にしてみることぐらいは模索すべきではないのかと。
「羊の執事」
「羊の検事」
「非通知は羊」
「羊で出陣」
「臨時の羊」
「羊の達人」
「羊の棺」
「眠りたいなら煙を思い浮かべよ」
「眠りたいならカタツムリを数えよ」
ますます意味が分からない。というか、自分が一体何を考え出そうとしているのか、そこからしてわからない。
要するに、まだ年賀状のイラストのネタが思いついてないんです…。「ひつじ」か…。うーん。ダジャレが思いつかないと、絵も思い浮かんでこない…。何だろう…この「道路の白線を踏み外したら即死」みたいな妙な俺ルールは…。
「羊の執事」
「羊の検事」
「非通知は羊」
「羊で出陣」
「臨時の羊」
「羊の達人」
「羊の棺」
「眠りたいなら煙を思い浮かべよ」
「眠りたいならカタツムリを数えよ」
ますます意味が分からない。というか、自分が一体何を考え出そうとしているのか、そこからしてわからない。
要するに、まだ年賀状のイラストのネタが思いついてないんです…。「ひつじ」か…。うーん。ダジャレが思いつかないと、絵も思い浮かんでこない…。何だろう…この「道路の白線を踏み外したら即死」みたいな妙な俺ルールは…。
[ ツッコむ ]
以上、1 日分です。