2013-05-16 3 views
0

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

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

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

ответ

0

Заключите весь код внутри END {}, а также изменить использования для требует, как требует Parallel :: Loops. Для тех модулей Dépendance неявно, явно включить их в п.п., например:

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, которые имеют use threads вариант, совместим с pp, и нам не нужен метод END {}.