From: Nakamatsu Shinji Date: 2010-01-30T20:14:03+09:00 Subject: [ruby-list:46829] Exerbでexe化したiconvを使ったスクリプトでエラーが発生する Ruby-listの皆さんこんにちは。 snakaと申します。 表題のとおりの現象に遭遇したのですが、原因などご存知の方がいれば 教えてください。 現象の詳細は以下のとおりです。 まず、以下のようなRubyスクリプトを作成しインタプリタ上で実行可能で あることを確認しました。 --- 元のスクリプト --- require 'iconv' UTF16toUTF8 = Iconv.new('utf-16be', 'utf-8') p UTF16toUTF8.iconv('no bom') ---------------------------- 次に上記スクリプトを、exerbコマンドでexe化しました。 そのときに使用したレシピファイルは以下のとおりです。 --- レシピファイル --- # Generated by mkexy # on 2010-01-29 00:22 general: startup: test.rb core: cui kcode: none file: test.rb: iconv.so: file: C:/PROGRA~1/ruby-1.8/lib/ruby/1.8/i386-mswin32/iconv.so type: extension-library iconv.dll: file: C:/PROGRA~1/ruby-1.8/bin/iconv.dll ---------------------------- 最初、mkexyコマンドで生成したレシピファイルには iconv.dll が含まれて ませんでしたが、その状態でexeを実行すると、以下のエラーが出たため 加えてみました。 --- エラー(1) --- test.rb:1:in `require': Win32API Error #126 --- 指定されたモジュールが見つかりません。 (ExerbRuntime::Error) from test.rb:1 -------------------- すると、以下のようなエラーに変りました。 --- エラー(2) --- test.rb:1:in `require': No such file to load -- iconv (LoadError) from test.rb:1 -------------------- ここでしばらく試行錯誤を繰り返したところ、元のスクリプトで"iconv"のrequireしている 箇所を"iconv.so"と拡張子付きで指定することで解決することができました。 --- 変更後のスクリプト --- require 'iconv.so' UTF16toUTF8 = Iconv.new('utf-16be', 'utf-8') p UTF16toUTF8.iconv('no bom') ---------------------------------- 一応、問題は回避できたんですが、根本原因がわからないのも気持ち悪いのでMLに 流してみました。 もし原因がわかるようでしたら教えてください。 環境は以下のとおりです。 - OS: Windows XP SP3 - Ruby: ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]