打包这个目录结构的pp的正确调用是什么?

时间:2014-02-06 11:41:31

标签: perl deployment perl-packager

我知道还有另外两个问题在这里遇到了同样的问题但是我的问题来自于实际尝试那里的建议,并希望从那以后还有其他一些对人有用的选择。

设置如下: 我有一个包含多个模块的应用程序,我想与安装了Strawberry Perl发行版的Windows机器上的某个人共享。

它的结构是这样的:

PerlApp
 lib
   Base
     Base.pm
     Gui.pm
   Db
     Db.pm
     records.db
   Parser
     Parser.pm
   Utils
     Utils.pm
 PerlApp.pl
 Config.txt

所有这些都有两个入口点。我可以通过带有PerlApp.pl脚本的cmd行界面运行它,也可以运行包含Wx接口的Gui.pm文件。

我正在运行带有CPAN安装的几个模块的Strawberry Perl。我尝试使用Cava Packager,但不幸的是它并不支持我开发的perl版本。

我已尝试pp但是打包cmd脚本导致的可执行文件会导致各种错误。我查阅了文档但是对于我的生活,我无法弄清楚如何使用这个模块来打包一个完整的目录树,或者甚至支持它。 (电话簿文件综合症)

我试过

pp -o app.exe PerlApp.pl

错误是:

The locale codeset (cp1252) isn't one that perl can decode, stopped at Encode/Locale.pm line 94
Compilation failed in require at LWP/UserAgent.pm line 1000
Compilation failed in require at lib/Base/Base.pm line 9

最后的解决方案是打包所需的所有文件,并确定需要在外部计算机上安装哪些CPAN模块才能使其工作,并最终要求用户自己手动安装它们。

1 个答案:

答案 0 :(得分:1)

当我打包perl脚本时,我曾经遇到过与charset(或Windows上的代码页)相关的类似错误。我在谷歌搜索,但没有找到任何直接的答案,但最终我自己想出来。

  1. 实际上Encode模块能够解码cp1252,真正的问题是Encode::Locale确定了 RUNTIME 的相应字符集,但PP只是在编译时添加了必要的依赖关系(如果我可以说)。因此,您需要在命令中添加-x选项以添加运行时依赖项。
  2. 完全避免Encode::Locale。即使您将必要的解码器pm打包到您的可执行文件中,当它在具有不同字符集的另一个系统上运行时,也会发生类似的错误。我建议您找出代码的哪一行使用Encode::Locale并找出解决方法。