mswin/Cygwin版Rubyにおける不具合調査
- mswin版namarecoがどうにも動かないのでなるべく簡単なテストサンプルを作ってみた
#!/usr/bin/ruby require 'readline' require 'timeout' th = Thread.new{ puts 'debug1' begin timeout(3) { puts 'debug2' sleep 4 puts 'debug3' } rescue Timeout::Error end puts 'debug4' } while buf = Readline.readline("% ", true) end th.join
-
- どうやらmswin版のtimeoutにバグがあるらしい
- Cygwin版で試したところ上記のサンプルは正常動作
- namarecoも正常動作
- そこでCygwin版のExerbでexe化
- exe化までは完了
- 実行時に以下のエラーが出てしまい調査してみた
$ ./namareco.exe 3 [main] namareco 4820 X:\work\namareco\namareco.exe: *** fatal error - Incompatible cygwin .dll -- incompatible per_process info 0 != 168
-
- エラーメッセージでぐぐって見つけた解説
普通の Ruby のソースならWindows上で動くどの Ruby でも実行ファイルにできるが、拡張モジュールを使う場合 Ruby-mswin32 じゃないとだめらしい。