【问题标题】:Library issue while using perl2exe使用 perl2exe 时的库问题
【发布时间】:2014-09-29 15:09:58
【问题描述】:

我正在尝试将我的 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 没有正确编译脚本。它读错了我的操作系统。

示例脚本如下:

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”。

【问题讨论】:

  • 您的问题是什么?到目前为止,您似乎只发现了一个问题。
  • @arco444 我会大胆猜测。也许,“它为什么会这样做,我该如何解决?”
  • 对不起。将我的问题添加到帖子的最后部分。
  • perl2exe 找到所有 userequire 语句并尝试提取这些模块。如果您在heredoc 的一行开头有use,它也会选择它。请记住,当您运行 perl2exe 时,它​​会使用您的 perl 脚本在您的机器上压缩安装 Perl。运行时,它将 Perl 安装解压缩到 temp 并使用该版本的 Perl 运行您的脚本。您应该能够在正确的位置创建具有这些名称的模块,并且它可能会停止抱怨。这些也只是警告吗?或者这是否会导致您的 exe 构建失败?
  • @AnoopSethu 你安装的是什么版本的 perl? perl2exe 在构建时是可靠的,但它只支持有限的版本。另一种工具是 Par::Packerpp search.cpan.org/~rschupp/PAR-Packer-1.022/lib/PAR/Packer.pm search.cpan.org/~rschupp/PAR-Packer-1.018/lib/pp.pm

标签: perl scripting activeperl perl2exe


【解决方案1】:

我尝试了多种可能的补救措施以使 perl2exe 正常工作。我删除了产生警告的部分(Hacked the modules)。研究并尝试了各种旗帜。不得不说,使用perl2exe将使用各种模块的Perl程序转换为exe文件根本不可行。

我找到了一款完全符合我要求的软件——Cava Packager。 花了一些时间才找到以下页面- How can I package my Perl script to run on a machine without Perl?

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

谢谢, 阿努普。

【讨论】:

    【解决方案2】:

    问题是

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

    打开文件你会看到这个

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

    把文件改成非只读,然后把#放在这一行,再回到perl2exe文件,应该就没了。

    【讨论】:

      【解决方案3】:

      本期的读者可能会感兴趣,除了 VMS/Stdio.pm 错误,我还收到“Can't locate the.pm”。它指向的我的 perl 代码中的行是文本“使用 't' 命令...”,它位于双引号打印语句中。显然 perl2exe 寻找“使用”语句,无论它出现在我的代码中的什么位置。解决方法是重新措辞文本以删除单词“使用”或将文本放在单引号中。

      【讨论】:

        猜你喜欢
        • 2012-06-17
        • 2022-01-04
        • 1970-01-01
        • 2021-02-24
        • 2021-07-13
        • 2019-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多