【问题标题】:can't compile my perl script. What is the easiest way to make everything work?无法编译我的 perl 脚本。让一切正常工作的最简单方法是什么?
【发布时间】:2013-03-23 12:31:03
【问题描述】:

我在编译我的 perl 脚本时遇到了很多麻烦。 我在脚本中使用了各种模块:

use fetchinfo; #which I wrote so it's in the same directory as my script
use threads;
use threads::shared;
use Tk;
use Fcntl ':flock';

而且 fetchinfo.pm 也使用这个模块:

use WWW::Mechanize;
use URI::Escape;
use Date::Calc qw(Delta_Days);
use LWP::Simple;
use HTML::Parser;

我的机器上安装了 ActivePerl(64 位 Win 7)。

我正在尝试编译我的代码并使其成为独立的 .exe 文件(尽管能够为其他系统编译也很棒(因为我认为我的代码不使用任何系统特定的功能)。

我不介意安装虚拟机(如果需要 32 位 win 或 linux),我不介意安装 Strawberry perl 而不是 ActivePerl...我只想能够编译代码:- )

尝试使用 perl2EXE 它说它找不到一些模块(尽管每个模块都是由 ppm 安装的)。我尝试使用 Perl Packager (PAR::Packer) 在 linux 上进行编译(因为它没有显示在 ppm 上,而且我无法以任何其他方式安装它)但是创建的文件不起作用。

...帮助? :-)

【问题讨论】:

  • 通常的做法是将lower_case 用于pragmatic 包(例如strictwarnings),CamelCase 用于functional包。熟悉 Perl 的人会感谢你调用你的包FetchInfo
  • 实际的包名不是 Fetchinfo。我只是不想写包裹的真实名称。真实姓名使用您提到的约定,但感谢您的提醒

标签: perl compilation compiler-errors activeperl pp-perl-par-packager


【解决方案1】:

您是否知道perl2exe 所做的只是创建包含您所有源文件的 perl 解释器可执行文件的副本(可能处于编译状态,我不确定)?

我建议您改用PAR package,它会构建一个存档文件,其中包含可以从perl 命令行运行的所有必要源代码。

如果您绝对必须拥有一个可执行映像,请查看PAR::Packer


更新

我实际上希望这个程序在没有安装 perl 的计算机上运行。我知道我必须编译我的代码才能工作。 PAR 包不这样做,对吧?

不,您不必编译 Perl 源代码即可将其放入包中。这样做会适得其反,因为由于解释生成的解析树所需的额外 ByteLoader 模块,加载时间往往会增加。

我实际上需要安装和使用 PAR::Packer 的帮助,因为我无法在 Windows 上的 ActivePerl 上安装它,而且它在 linux 上为我制作的可执行文件在 Windows 64 位上无法运行。所以我做错了什么

我没有 ActivePerl 的实例,但 Par::Packer 在 Strawberry Perl 5 版本 16.2 上安装良好并通过了所有测试。请理解,您无法在一个系统上构建将在不同平台上运行的可执行文件。这适用于每一种语言,而不仅仅是 Perl。您需要在与您的目标兼容的系统上使用 Perl 的工作版本,以便能够构建可以在其他地方工作的可执行文件。

【讨论】:

  • 我实际上希望这个程序在没有安装 perl 的计算机上运行。我知道我必须编译我的代码才能工作。 PAR包不这样做,对吧? + 我实际上需要安装和使用 PAR::Packer 的帮助,因为我无法在 Windows 上的 ActivePerl 上安装它,而且它在 linux 上为我制作的可执行文件在 Windows 64 位上不起作用。所以我做错了。
  • @Thatkookooguy:我已经添加到我的答案中来解释。
  • 我并不是说每个系统都运行一个可执行文件。我的意思是一个编译器(或打包器),它可以在单台机器上生成每个操作系统的可执行文件。我知道 perl2exe 有一个带有您要为其打包文件的操作系统的标志。因此,如果您选择 windows,它会生成一个 .exe,并在您选择要打包代码以稍后在 linux 上运行时生成一个 linux 可执行文件。我不太确定我得到你的权利。您的意思是 PAR 甚至可以在没有 perl 的计算机上运行,​​因为它包含了一个 perl 实例?另外,您是否尝试在 Windows 32 或 64 位的 strabery Perl 5 上安装 Par::Packer?
  • 我怀疑这是否可能。我猜perl2exe 是通过为它支持的所有平台保留一个 perl 构建库来实现的,并选择其中一个与您的源捆绑在一起,为所需的平台创建一个可执行的映像文件。是的,这正是我对PAR::Packer 的意思。从 Perl 脚本创建可执行文件的唯一方法是将工作的 perl 编译器/解释器与脚本捆绑在一起。我在 W7 x64 上安装了PAR::Packer
  • 我自己从未使用过它,但您可能会从Cava Packager 获得一些里程。我还在Perl2Exe documentation 中找到了这个:“如果它因“Can't locate somemodule.pm in @INC ...”错误消息而死,那么为缺少的模块添加一个显式使用语句到您的脚本。”,这可能对你有用。
猜你喜欢
  • 2021-12-17
  • 2011-11-01
  • 2013-04-23
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多