Проблема с библиотекой при использовании 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 файлу снова, затем он должен быть удален.