Почему мое приложение Perl PAR сразу умирает?

Вероятно, это вопрос новичка, поскольку я только начал использовать pp. Я прочитал документацию по CPAN и попытался создать исполняемый файл для своего приложения. Я использую Camelbox и Tk на Windows XP, PAR::Packager версии 0.991 (PAR версии 0.994). Чтобы убедиться, что pp работает, я создал очень простой hello_world.pl с помощью Tk, скомпилировал его в .exe и запустил. Все идет нормально.

Когда я использую pp -o out.exe my_program.pl в своем приложении и пытаюсь запустить out.exe, появляется окно консоли и вскоре после этого умирает без сообщения об ошибке. Проблема в том, что я не знаю, с чего начать искать решение, так как сообщения нет. Я пытался сделать то же самое, используя tkpp (графический интерфейс для pp), так как он пишет файл журнала, но эффект тот же, и файл журнала пуст. Кто-нибудь может мне помочь?


person Nele Kosog    schedule 22.12.2009    source источник


Ответы (2)


  1. Обновите Module::ScanDeps до последней версии (или 0.95) и повторите попытку.

  2. Запустите программу из окна консоли командной строки, скопируйте сообщение об ошибке и отправьте его в список рассылки PAR или отслеживание ошибок PAR::Packer

person Alexandr Ciornii    schedule 22.12.2009
comment
Спасибо за ваш ответ. CPAN сообщает мне, что Module::ScanDeps обновлен. Но ваш второй намек, наконец, дает мне сообщение об ошибке, которое я искал. Один из моих собственных модулей не был включен в исполняемый файл. Должен ли я указывать каждый модуль отдельно? Я использую их, и они находятся в том же каталоге, что и программа, которую я пытаюсь упаковать. - person Nele Kosog; 22.12.2009
comment
Ваш модуль должен выбираться автоматически, если вы используете use или require без переменной. Если вы используете что-то вроде eval, используйте $var, вам нужно добавить модуль с «-M». В общем, трудно сказать, не видя источников. - person Alexandr Ciornii; 22.12.2009
comment
Александр, я понимаю, в чем может быть проблема. Я использую CPANs FindBin для обнаружения локального каталога и использую lib путь, который он создает. Это похоже на использование $var — спасибо! - person Nele Kosog; 23.12.2009

Если вы не получаете ошибку, как вы знаете, что он умирает?

Возможно, ваша программа работает нормально, но окно консоли закрывается до того, как вы видите вывод.

Возможно, попробуйте сделать паузу после печати hello world?

print "Hello, World!";
<>;  # pause for input
person Ed Guiness    schedule 22.12.2009
comment
Спасибо за ваше предложение. Используя крошечную программу hello world, она ожидает ввода, запускается и останавливается без ошибок. Однако в моем приложении есть графический интерфейс Tk, который открывает диалоговое окно. Когда он упакован с pp, он ничего не делает. По крайней мере, теперь я знаю, что отображается сообщение об ошибке — консоль закрывается слишком быстро, чтобы прочитать его. Как я могу предотвратить закрытие консоли? - person Nele Kosog; 22.12.2009
comment
@Nele Kosog: запустите программу из командной строки (вместо двойного щелчка по ней в проводнике). - person Michael Carman; 22.12.2009
comment
Спасибо, Майкл, иногда это так очевидно, что я просто скучаю. - person Nele Kosog; 23.12.2009