使用perl2exe时出现的库问题

使用perl2exe时出现的库问题,perl,scripting,activeperl,perl2exe,Perl,Scripting,Activeperl,Perl2exe,我正在尝试将我的Perl脚本转换为独立的exe。 我认为perl2exe是一个用于此目的的工具。或多或少 当我试图生成exe文件时,我遇到了库问题 图书馆问题之一是: 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) 当我转到

我正在尝试将我的Perl脚本转换为独立的exe。 我认为perl2exe是一个用于此目的的工具。或多或少

当我试图生成exe文件时,我遇到了库问题

图书馆问题之一是:

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)
当我转到Temp.pm的第19行时,该行的内容如下:

require VMS::Stdio if $^O eq 'VMS';
但是,我的操作系统是MSWin32。 我的结论是,perl2exe没有正确编译脚本。我的操作系统读错了

示例脚本如下所示:

require VMS::Stdio if $^O eq 'VMS';
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”。

我尝试了各种可能的补救措施,以使perl2exe正常工作。我删除了产生警告的部分(黑客攻击了模块)。研究并尝试了各种各样的旗帜。我必须说,使用perl2exe将使用不同模块的Perl程序转换为exe文件是完全不可行的

我找到了一个完全符合我要求的软件——Cava Packager。 花了一些时间才找到下面的页面-

它将我的Perl程序转换为Exe,并生成了一个安装文件。太棒了

谢谢, 啊。

问题是

C:\Perl\lib\File\Temp.pm line 19
打开文件,您将看到以下内容

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

将文件更改为非只读,然后将
#
放在这一行,再次返回到perl2exe,然后文件应该消失。

本期读者可能感兴趣的是,除了VMS/Stdio.pm错误之外,我还收到了“找不到.pm”。在我的perl代码中,它指向的那一行是文本“Use The't'command…”,它位于双引号的print语句中。显然,perl2exe查找“use”语句,而不管它出现在我的代码中的什么地方。解决方法是重新编写文本以删除“use”一词,或者将文本置于单引号中。

您的问题是什么?到目前为止,您似乎只发现了一个问题。@arco444我随便猜一猜。也许,“它为什么要这样做,我怎样才能修复它?”我很抱歉。将我的问题添加到post的最后一部分。perl2exe会查找所有
use
require
语句,并尝试提取这些模块。如果您在heredoc中的行首有
使用
,它也会将其拾取。请记住,当您运行perl2exe时,它正在使用您的Perl脚本在您的机器上压缩Perl的安装。运行时,它将Perl安装解压到temp中,并使用该版本的Perl运行脚本。您应该能够在正确的位置创建具有这些名称的模块,并且它可能停止抱怨。这些只是警告吗?或者这会导致exe生成失败?@AnoopSethu您安装了什么版本的perl?perl2exe在构建时是可靠的,但它只支持有限的版本。另一种工具是
Par::Packer
pp