使用perl2exe时库问题

时间:2014-09-29 15:09:58

标签: 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)

当我走到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'。

3 个答案:

答案 0 :(得分:0)

我尝试了一种可能的修复方法,使perl2exe正常工作。我删除了产生警告的部分(黑客攻击模块)。学习并尝试各种旗帜。我不得不说使用perl2exe将使用各种模块的Perl程序转换为exe文件是不可行的。

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

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

谢谢, Anoop。

答案 1 :(得分:0)

问题是

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

打开您将看到的文件

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

将文件更改为非只读,然后为此行添加#,再次返回perl2exe文件,然后它就会消失。

答案 2 :(得分:0)

这个问题的读者可能会感兴趣的是,除了VMS / Stdio.pm错误之外,我还收到了“找不到.pm”。我指向的perl代码中的行是“使用't'命令...”文本,它位于双引号的print语句中。显然,无论我的代码出现在哪里,perl2exe都会查找“use”语句。解决方法是重新翻译文本以删除单词'use'或将文本放在单引号中。

相关问题