2014-02-06 50 views
2

我知道还有另外两个问题在这里遇到了同样的问题,但我的实际情况是尝试了那里的建议,并希望自那时起还有其他一些方法可用于人们。什么是pp的正确调用来打包这个目录结构?

设置是这样的: 我有一个应用程序与多个模块,我想与安装了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文件。

我正在运行Strawberry Perl,这个程序使用了从CPAN安装的多个模块。我尝试过使用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模块安装在外部机器使其工作并最终要求用户自己手动安装它们。

+0

'pp'可能是要走的路。如果您的使用有问题,最好向我们展示错误消息等等 - 理想情况下,这是一个完整的,最小的,可运行的示例,可以说明您的问题。然后我们可以试着帮助你。我们无法通过指向[Magic :: FairyWand]模块v0.42来帮助你,它可以解决你所有的问题,而无需进一步的努力](https://metacpan.org/pod/Magic:FairyWand),因为它不存在。 – amon

+0

我的使用问题是我不明白它的用法。我知道是荒谬的。鉴于我在操作中提到的结构,我怎样才能真正运行它,甚至可以窥见输出。我尝试了明显的pp -o bla.exe PerlApp.pl。但是我非常怀疑这种方式,除非pp巧妙地在目录中环顾四周,这就像你说的,一个仙女的愿望。 – user3046061

+0

啊。也许你可以[编辑]你的问题,这样更明显的是你实际上在询问:*'pp'打包这个目录结构的正确调用是什么 - 'some command' does not work。*“我不'没有必要的知识来回答这个问题,但你可以让其他人更容易。 – amon

回答

1

当我打包一个perl脚本时,我曾经有一个类似的与charset(或Windows上的代码页)相关的错误。我到处搜索,但没有找到任何直接的答案,但最终我自己找到了答案。

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