前回、「ocra」で用意したもので、一部問題があったのでメモしておきます。
■環境
□環境1
WindowsXP
ruby(i386-mswin32-1.8.7patchlevel72)、rubygems(1.3.5)、ocra(1.3.0)インストール済み
□環境2
Windows7(64bit)
ruby(mswin64-1.9.2)、rubygems(1.8.24)、ocra(1.3.0)インストール済み
■32bit用に用意する際の注意点
□zlibのバージョン
zlibは、現在最新の125だとなぜかエラーが出る。
※こちらで配布されていたもの。(64bitは大丈夫だった)
http://www.winimage.com/zLibDll/index.html
123だとうまくいったので、125以外で挑戦する事。
※123はこちらで配布されていたもの。(今は、同じ所からは見つけられなかった)
http://www.zlib.net/
例)こんなエラーが出た(ruby 1.8.7)
C:\>gem install ocra
ERROR: While executing gem ... (Zlib::Error)
unknown zlib error 0:
例)こんなエラーが出た(ruby 1.9.2)
C:\>gem install ocra
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems.rb
:543: [BUG] Segmentation fault
ruby 1.9.2p136 (2010-12-25 revision 30365) [i386-mswin32]
-- control frame ----------
c:0025 p:---- s:0145 b:0145 l:000144 d:000144 CFUNC :(null)
c:0024 p:---- s:0143 b:0143 l:000142 d:000142 CFUNC :new
c:0023 p:0064 s:0139 b:0139 l:000138 d:000138 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems.rb:543
c:0022 p:0191 s:0135 b:0135 l:000134 d:000134 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/remote_fetcher.rb:239
c:0021 p:0131 s:0127 b:0127 l:000126 d:000126 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:260
c:0020 p:0058 s:0114 b:0112 l:000103 d:000111 BLOCK C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:231
c:0019 p:---- s:0109 b:0109 l:000108 d:000108 FINISH
c:0018 p:---- s:0107 b:0107 l:000106 d:000106 CFUNC :each
c:0017 p:0091 s:0104 b:0104 l:000103 d:000103 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:227
c:0016 p:0039 s:0095 b:0095 l:000094 d:000094 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:150
c:0015 p:0031 s:0084 b:0084 l:000083 d:000083 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:89
c:0014 p:0238 s:0074 b:0074 l:000073 d:000073 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/dependency_installer.rb:110
c:0013 p:0177 s:0065 b:0065 l:000064 d:000064 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/dependency_installer.rb:228
c:0012 p:0054 s:0054 b:0054 l:000053 d:000053 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/dependency_installer.rb:259
c:0011 p:0119 s:0048 b:0048 l:000037 d:000047 BLOCK C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/commands/install_command.rb:121
c:0010 p:---- s:0043 b:0043 l:000042 d:000042 FINISH
c:0009 p:---- s:0041 b:0041 l:000040 d:000040 CFUNC :each
c:0008 p:0118 s:0038 b:0038 l:000037 d:000037 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/commands/install_command.rb:115
c:0007 p:0076 s:0032 b:0032 l:000031 d:000031 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/command.rb:278
c:0006 p:0193 s:0028 b:0028 l:000027 d:000027 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/command_manager.rb:147
c:0005 p:0013 s:0022 b:0022 l:000021 d:000021 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/command_manager.rb:117
c:0004 p:0178 s:0017 b:0017 l:000016 d:000016 METHOD C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/gem_runner.rb:65
c:0003 p:0219 s:0009 b:0009 l:001754 d:000240 EVAL C:/ruby-1.9.2-p136-i386-mswin32/bin/gem:30
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:001754 d:001754 TOP
---------------------------
-- Ruby level backtrace information ----------------------------------------
C:/ruby-1.9.2-p136-i386-mswin32/bin/gem:30:in `<main>'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/gem_runner.rb:65:in `run'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/command_manager.rb:117:in `run'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/command_manager.rb:147:in `process_args'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/command.rb:278:in `invoke'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/commands/install_command.rb:115:in `execute'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/commands/install_command.rb:115:in `each'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/commands/install_command.rb:121:in `block in execute'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/dependency_installer.rb:259:in `install'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/dependency_installer.rb:228:in `find_spec_by_name_and_version'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/dependency_installer.rb:110:in `find_gems_with_sources'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:89:in `fetch_with_errors'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:150:in `find_matching_with_errors'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:227:in `list'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:227:in `each'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:231:in `block in list'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/spec_fetcher.rb:260:in `load_specs'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems/remote_fetcher.rb:239:in `fetch_path'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems.rb:543:in `gunzip'
C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/site_ruby/1.9.1/rubygems.rb:543:in `new'
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
□zlibの種類
32bitのruby使うなら、32bitのzlibを使用する。
64bitのruby使うなら、64bitのzlibを使用する。
例)こんなエラーが出た
C:\>gem install ocra
ERROR: Loading command: install (LoadError)
193: %1 は有効な Win32 アプリケーションではありません。 - C:/ruby-1.9.2-p136-i386-mswin32/lib/ruby/1.9.1/i386-mswin32/zlib.so
ERROR: While executing gem ... (NameError)
uninitialized constant Gem::Commands::InstallCommand
■テスト
□test.rb用意。
p "あ"
□環境1でexe作成。
ocra test.rb
□環境1で出来たexeを環境1で実行したら、問題なし。
□環境1で出来たexeを環境2で実行したら、文字化け。
■テスト2
□test.rb用意。
#! ruby -Ku
# -*- coding: utf-8 -*-
p "あ"
□環境2でexe作成。
ocra test.rb
□環境2で出来たexeを環境2で実行したら、問題なし。
□環境2で出来たexeを環境1で実行したら、問題なし。
■結論
・zlibに注意。
・文字コードをしっかり指定。
・Windows7で32bit用の環境にてexe作成。
前回、「ocra」で用意したもので、一部問題があったのでメモしておきます。
■環境
□環境1
Windows7(64bit)
ruby(mswin64-1.9.2)、rubygems(1.8.24)、ocra(1.3.0)インストール済み
□環境2
WindowsXP
ruby(i386-mswin32-1.8.7patchlevel72)、rubygems(1.3.5)、ocra(1.3.0)インストール済み
■テスト
□環境1でexe作成。
ocra test.rb
□環境2で環境1で出来たexeを実行したら、下記エラー発生。
※コマンドプロンプトから実行しないと、一瞬でウィンドウ消えてしまうので注意。
- -
>test.exe
FATAL ERROR: Failed to create process (C:¥DOCUME~1¥~¥LOCALS~1¥Temp¥ocr??.tmp¥bin¥ruby.exe): 193
- -
このエラー[Failed to create process]が出るのは、
下記のCreateProcessに失敗したら出るようです。
https://github.com/larsch/ocra/blob/master/src/stub.c
getLastError()の戻り値が193と言うことは…
>winerror.h
>ERROR_BAD_EXE_FORMAT
>%1 は有効な Win32 アプリケーションではありません。
■テスト2
一応、逆パターンでどうなるか確認してみました。
□環境2でexe作成。
ocra test.rb
□環境1で環境2で出来たexeを実行したら、問題なかった。
■結論
1バイナリを目指すなら、下記のどちらかでexe生成しないといけない。
・WindowsXPでexe作成。
・Windows7で32bit用の環境にてexe作成。
ものすごく根本的な部分を忘れてましたが、また忘れそうなので残しておきます…。
■環境
□環境1
Windows7(64bit)
ruby(mswin64-1.9.2)、rubygems(1.8.24)、ocra(1.3.0)インストール済み
□環境2
WindowsXP
ruby(i386-mswin32-1.8.7patchlevel72)、rubygems(1.3.5)、ocra(1.3.0)インストール済み
■テスト
□環境1でexe作成。
ocra test.rb
□環境2で環境1で出来たexeを実行したら、下記エラー発生。
※コマンドプロンプトから実行しないと、一瞬でウィンドウ消えてしまうので注意。
- -
>test.exe
FATAL ERROR: Failed to create process (C:¥DOCUME~1¥~¥LOCALS~1¥Temp¥ocr??.tmp¥bin¥ruby.exe): 193
- -
このエラー[Failed to create process]が出るのは、
下記のCreateProcessに失敗したら出るようです。
https://github.com/larsch/ocra/blob/master/src/stub.c
getLastError()の戻り値が193と言うことは…
>winerror.h
>ERROR_BAD_EXE_FORMAT
>%1 は有効な Win32 アプリケーションではありません。
■テスト2
一応、逆パターンでどうなるか確認してみました。
□環境2でexe作成。
ocra test.rb
□環境1で環境2で出来たexeを実行したら、問題なかった。
■結論
1バイナリを目指すなら、下記のどちらかでexe生成しないといけない。
・WindowsXPでexe作成。
・Windows7で32bit用の環境にてexe作成。
ものすごく根本的な部分を忘れてましたが、また忘れそうなので残しておきます…。
rubyファイルで色々作って、他の人に渡す際にruby環境作って…とはなかなか言えません。
(バージョン違うと問題出て対応面倒ですし…
以前挑戦して挫けたのが、「Exerb」。
http://exerb.sourceforge.jp/
今回は、「ocra」で挑戦。
rubygemsのパッケージで、「ocra」があるようです。
http://rubygems.org/gems/ocra
■環境
Windows7(64bit)
ruby(mswin1.9.2)、rubygems(1.8.24)インストール済み
■ocraパッケージをインストール
□実行
gem install ocra
□ログ
Fetching: ocra-1.3.0.gem (100%)
Successfully installed ocra-1.3.0
1 gem installed
Installing ri documentation for ocra-1.3.0...
Installing RDoc documentation for ocra-1.3.0...
□備考
本当にインストールされたか、下記コマンドで確認。
gem list
→ocraが出ればOK
■ocraでexe化
□実行
ocra test.rb
□ログ
=== Loading script to check dependencies
~rubyで何かログを出していればここで出る~
=== Including 52 encoding support files (2000000 bytes, use --no-enc to exclude)
=== Building ScenarioConv.exe
=== Adding user-supplied source files
=== Adding ruby executable ruby.exe
=== Adding library files
=== Compressing 5100000 bytes
=== Finished building ScenarioConv.exe (1200000 bytes)
□注意
test.rbでは大丈夫だったのに、いくつかexe化する際に変更しないといけない点があります。
・taskは使えないのでコメントにしておく。
・defを使うなら、使う前に中身を用意しておく。(プログラムを上から下に処理していくので)
□備考
同階層に、test.exeが出来ている。
■exe化されたものをテスト
実行すると、test.rbで実行した結果と同じようになる。
環境が整っていれば、かなり手軽にexe化出来ると思います。
(バージョン違うと問題出て対応面倒ですし…
以前挑戦して挫けたのが、「Exerb」。
http://exerb.sourceforge.jp/
今回は、「ocra」で挑戦。
rubygemsのパッケージで、「ocra」があるようです。
http://rubygems.org/gems/ocra
■環境
Windows7(64bit)
ruby(mswin1.9.2)、rubygems(1.8.24)インストール済み
■ocraパッケージをインストール
□実行
gem install ocra
□ログ
Fetching: ocra-1.3.0.gem (100%)
Successfully installed ocra-1.3.0
1 gem installed
Installing ri documentation for ocra-1.3.0...
Installing RDoc documentation for ocra-1.3.0...
□備考
本当にインストールされたか、下記コマンドで確認。
gem list
→ocraが出ればOK
■ocraでexe化
□実行
ocra test.rb
□ログ
=== Loading script to check dependencies
~rubyで何かログを出していればここで出る~
=== Including 52 encoding support files (2000000 bytes, use --no-enc to exclude)
=== Building ScenarioConv.exe
=== Adding user-supplied source files
=== Adding ruby executable ruby.exe
=== Adding library files
=== Compressing 5100000 bytes
=== Finished building ScenarioConv.exe (1200000 bytes)
□注意
test.rbでは大丈夫だったのに、いくつかexe化する際に変更しないといけない点があります。
・taskは使えないのでコメントにしておく。
・defを使うなら、使う前に中身を用意しておく。(プログラムを上から下に処理していくので)
□備考
同階層に、test.exeが出来ている。
■exe化されたものをテスト
実行すると、test.rbで実行した結果と同じようになる。
環境が整っていれば、かなり手軽にexe化出来ると思います。
