Компилятор или упаковщик perl, которые допускают использование perl fork в Windows

Если в Perl-коде используется fork или его вариант, такой как Paralell:: Loops или Parallel:: ForkManager, при запуске pp из сгенерированного Par:: Packer автономного exe-файла произойдет сбой, см. Пример в https://groups.google.com/forum/?fromgroups. B::C или B::CC также тестируются, не работая в таких случаях: activeperl не может даже установить его, показать ошибку, например:

C.obj: ошибка LNK2001: неразрешенный внешний символ Perl_Iwatchaddr_ptr
C.obj: ошибка LNK2001: неразрешенный внешний символ Perl_Iwatchok_ptr

Cygwin Perl может установить и сгенерировать исполняемый файл, как указано в https://github.com/rurban/perl-compiler, но когда мы его запускаем, он вылетает с ошибкой, например, END не удалось - вызов очереди прерван. Не удалось напечатать в канал. Есть ли какой-нибудь проверенный работающий Perl-компилятор или упаковщик, который бы работал на fork?

1 ответ

Заключите весь код в END {} и измените использование на require, например require Parallel:: Loops. Для этих модулей зависимости от имплицитности явно включите их в pp, например:

pp -M Params::Validate::XS -M Params::Validate::PP -M Class/Load/XS.pm -M Class/Load/PP.pm -o some-code.exe some-code.pl

Если сценарию не нужно обмениваться данными между родителем и потомками, мы также можем использовать MCE, у которого есть опция использования потоков, совместимая с pp, и нам не нужен метод END {}.

Другие вопросы по тегам