Проблема с библиотекой при использовании perl2exe

Я пытаюсь конвертировать мой Perl-скрипт в автономный exe-файл. Я предполагаю, что perl2exe - инструмент, который служит этой цели. Более менее.

Когда я пытаюсь сгенерировать исполняемый файл, у меня возникают проблемы с библиотекой.

Одним из вопросов библиотеки является:

Warning: Can't locate VMS/Stdio.pm
at C:\Perl\lib\File\Temp.pm line 19
@INC = C:\Perl\site\lib, C:\Perl\lib, ., C:\Perl\lib\Digest, must be directory, not file)

Когда я перешел к строке 19 из Temp.pm, строка написана следующим образом:

require VMS::Stdio if $^O eq 'VMS';

Но моя ОС - MSWin32. Я прихожу к выводу, что perl2exe неправильно компилирует скрипт. Его чтение моей ОС неправильно.

Пример сценария выглядит следующим образом:

my_libraries.pl

use Tk;
use lib 'C:\Perl\lib\Digest';
use strict;
use strict;
use warnings;
use strict;
use warnings;
use LWP::Simple qw(getstore);
use LWP::UserAgent;
use Digest::MD5    qw( md5_hex );
use Digest::MD5::File qw( file_md5_hex );
use File::Fetch;
use WWW::Mechanize ;
use Tk::ErrorDialog;


c:\perl2exe\perl2exe-16.00-Win> perl2exe my_libraries.pl my_libraries.exe


Warning: Can't locate File/BSDGlob.pm
    at C:\Perl\lib\File\GlobMapper.pm line 13
    @INC = C:\Perl\site\lib, C:\Perl\lib, ., C:\Perl\lib\Digest, must be directory, not file)

Warning: Can't locate Digest/Perl/MD5.pm
    at C:\Perl\lib\Digest\MD5.pm line 30
    @INC = C:\Perl\site\lib, C:\Perl\lib, ., C:\Perl\lib\Digest, must be directory, not file)

Warning: Can't locate VMS/Stdio.pm
    at C:\Perl\lib\File\Temp.pm line 19
    @INC = C:\Perl\site\lib, C:\Perl\lib, ., C:\Perl\lib\Digest, must be directory, not file)

Warning: Can't locate VMS/DCLsym.pm
    at C:\Perl\lib\IPC\Cmd.pm line 227
    @INC = C:\Perl\site\lib, C:\Perl\lib, ., C:\Perl\lib\Digest, must be directory, not file)

Warning: Can't locate VMS/Filespec.pm
    at C:\Perl\lib\ExtUtils\Manifest.pm line 31
    @INC = C:\Perl\site\lib, C:\Perl\lib, ., C:\Perl\lib\Digest, must be directory, not file)

Warning: Can't locate HTML/FormatText.pm
    at C:\Perl\lib\HTML\Element.pm line 1297
    @INC = C:\Perl\site\lib, C:\Perl\lib, ., C:\Perl\lib\Digest, must be directory, not file)

Сожалею. позвольте мне поставить мой очевидный вопрос здесь: почему perl2exe дает проблемы с библиотекой, которые не предназначены для появления? Это ошибка в perl2exe или я что-то не так делаю? Я имею в виду, вы можете увидеть в строке 19, что если ОС VMS, то требуется stdio.pm. Моя ОС - "MSWin32".

3 ответа

Решение

Я пытался исправить возможные ошибки, чтобы perl2exe работал. Я удалил разделы, которые выдавали предупреждения (взломал модули). Учился и пробовал различные флаги. Я должен сказать, что совсем не возможно конвертировать Perl-программы, используя различные модули для exe-файлов, используя perl2exe.

Я нашел программное обеспечение, которое именно то, что я хотел, - Cava Packager. Потребовалось некоторое время, чтобы найти следующую страницу: Как я могу упаковать свой Perl-скрипт для запуска на машине без Perl?

Он преобразовал мою Perl-программу в Exe, а также сгенерировал установочный файл. Потрясающие.

Спасибо, Anoop.

Читателям этой проблемы может быть интересно, что в дополнение к ошибке VMS/Stdio.pm я также получил сообщение "Не удается найти файл.pm". Строка в моем Perl-коде, на которую он указывал, была текстом "Использовать команду" t "...", которая была внутри оператора печати в двойных кавычках. Очевидно, perl2exe искал выражение "использование" независимо от того, где в моем коде оно появилось. Исправление состояло в том, чтобы либо переименовать текст, чтобы удалить слово "использовать", либо поместить текст в одинарные кавычки.

Проблема в

C:\Perl\lib\File\Temp.pm line 19

Откройте файл, вы увидите это

require VMS::Stdio if $^O eq 'VMS';

Измените файл не только для чтения, затем поместите # для этой строки вернитесь к perl2exe файлу снова, затем он должен быть удален.

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