2007/02/03(土)PARでPerlをWindows実行ファイルに(with ithreads)
ActivePerl 5.10の場合はこちら。以下はActivePerl5.8.x用です。
PARとは
PARとは、Perlのパッケージツールの1種なのですが、これを利用することでWindows上で(Perlがなくても)実行出来るEXEファイルを生成することができます。ActivePerlなら通常
> ppm install PAR > pp -o test.exe test.pl
で済むのですが、この標準の PPM パッケージが古く、ithreads が利用出来ないなどの欠点があります。これは perl 5.8.0 ベースで作られているせいであり、同じ理由で「use 5.8.1;」なども書くことができなくなります。
PARによるPerlスクリプトのEXE化を参考に、Mingwを入れて最新版をインストールしたのですが、どうしても次のエラーが出て実行できませんでした。
Can't locate Win32.pm in @INC (@INC contains: .) at xxx.pl line 817.
この問題をうまく解決出来たので報告します。
PARのインストール
- ActivePerl 5.8.8-build-820 - Windows (x86)
- PAR-0.973
- PAR-Packer-0.973
そのときの最新版で問題ないと思いますが、不安な場合はまったく同じバージョンを用意してください。まず、ActivePerlをインストールします。その後、それぞれのファイルを解凍します。
まず、ExtUtils::FakeConfigが必要なので、ppmで構いませんからインストールしてください。
> ppm install ExtUtils-FakeConfig
次に PAR-Packer にパッチを充てます。必ず make 前に行ってください*1。
PAR-Packer-0.973\script\par.plの690行目付近 require PAR::Dist; require PAR::Filter::PodStrip; require Win32 if $^O eq 'MSWin32'; # この行を追加 eval { require Scalar::Util };
あとは普通に make してインストールしてください。make 時に不足するライブラリやツールは自動で取ってくれると思います(ただし再度同じコマンドを実行する必要が出たりします)。
> cd PAR-0.973 > perl Makefile.PL > nmake > nmake install > cd .. > cd PAR-Packer-0.973 > perl -MConfig_m Makefile.PL > nmake > nmake install
これで、ithreads が問題なく動く pp が生成できると思います。