Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2006-04-07

Ruby/SDL + Exerb ではまる

Ruby/SDL のインストール

Download Ruby/SDL から「Win32's binary(ver 1.0.0) and ruby 1.8.4 interpreter package 」をダウンロードして解凍。

ruby ディレクトリを「 E:\ruby 」にコピー。 「 E:\ruby\bin 」にパスを通して終了。

Exerb のインストール

Exerb サイトから 「exerb-3.3.1.tar.gz」をダウンロード。ダウンロードしたファイルを解凍したディレクトリ(setup.rbがあるディレクトリ)にコマンドプロンプトで移動して下記を実行。

ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

インストールは完了。

ball.rb から ball.exe を作成

ruby -r exerb/mkexr ball.rb

を実行。レシピファイル ball.exr が作成される。

ruby E:\ruby\bin\exerb ball.exr

で ball.exe が作成される。

問題点

うまくいったかと思って、ここでできた exe を別の Windows で実行すると SDL 関係の DLL が見つからないというエラーが発生。

レシピファイル ball.exr に SDL 関係の DLL を追加。

# generated by mkexr.rb
set_kcode	none
add_ruby_script	ball.rb
add_ruby_script	forwardable.rb	E:/ruby/lib/ruby/1.8/forwardable.rb
add_ruby_script	rubysdl_aliases.rb	E:/ruby/lib/ruby/site_ruby/1.8/rubysdl_aliases.rb
add_ruby_script	sdl.rb	E:/ruby/lib/ruby/site_ruby/1.8/sdl.rb
add_extension_library	sdl.so	E:/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt/sdl.so

add_resource_library	E:/ruby/bin/SDL.dll
add_resource_library	E:/ruby/bin/SDL_ttf.dll
add_resource_library	E:/ruby/bin/iconv.dll
add_resource_library	E:/ruby/bin/zlib.dll
add_resource_library	E:/ruby/bin/SDL_image.dll
add_resource_library	E:/ruby/bin/SGE.dll
add_resource_library	E:/ruby/bin/jpeg.dll
add_resource_library	E:/ruby/bin/sdlskk.dll
add_resource_library	E:/ruby/bin/zlib1.dll
add_resource_library	E:/ruby/bin/SDL_mixer.dll
add_resource_library	E:/ruby/bin/freetype-6.dll
add_resource_library	E:/ruby/bin/libpng13.dll
add_resource_library	E:/ruby/bin/smpeg.dll 

このレシピファイルで exe を作成するとサイズが 3.5 M ほどの exe が作れる。しかしこれを実行すると、

exerb: the loaded recourse table is too big. (Exerb::RuntimeError)

というエラー。ぐぐったら exerb のソース が引っかかって、これを見ると、

42: LOADED_LIBRARY_ENTRY g_loaded_library_table[32] = {0};

と 32 個にハードコーディングされている模様。この最大数の問題だろうか。

しかし Ruby/SDL で実装したシューティングゲーム を見るとちゃんと exe 化できているから、きっとうまくやる方法があるはずなんだけど……。