5

当我运行以下命令从我的 Perl 脚本中创建可执行文件时:

pp -o process_target_mode_data Process_Target_Mode_Data.pl

我得到以下错误输出:

 Perl lib version (5.12.2) doesn't match executable version (v5.12.0) at /home/Neil/ActivePerl-5.12/lib/Config.pm line 50.

Compilation failed in require at /home/Neil/ActivePerl-5.12/lib/Errno.pm line 8.
BEGIN failed--compilation aborted at /home/Neil/ActivePerl-5.12/lib/Errno.pm line 8.
Compilation failed in require at /home/Neil/ActivePerl-5.12/lib/File/Temp.pm line 148.
BEGIN failed--compilation aborted at /home/Neil/ActivePerl-5.12/lib/File/Temp.pm line 148.
Compilation failed in require at /home/Neil/ActivePerl-5.12/lib/Archive/Zip.pm line 14.
BEGIN failed--compilation aborted at /home/Neil/ActivePerl-5.12/lib/Archive/Zip.pm line 14.
Compilation failed in require at -e line 459.

/home/Neil/ActivePerl-5.12/site/bin/pp: Failed to extract a parl from 'PAR::StrippedPARL::Static' to file 'parleNrP2Xi' at /home/Neil/ActivePerl-5.12/site/lib/PAR/Packer.pm line 1172, <DATA> line 1.

有人可以向我解释发生了什么以及如何解决这个问题吗?

brian d foy 要求的信息:

[bash-3.2][Neil@willy]$ 哪个页
/home/Neil/ActivePerl-5.12/site/bin/pp

[bash-3.2][Neil@willy]$ /home/Neil/ActivePerl-5.12/site/bin/pp -o process_target_mode_data Process_Target_Mode_Data.pl
Perl lib 版本 (5.12.2) 与 /home/Neil/ActivePerl-5.12/lib/Config.pm 第 50 行的可执行版本 (v5.12.0) 不匹配。
/home/Neil/ActivePerl-5.12/lib/Errno.pm 第 8 行的 require 编译失败。
BEGIN 失败——编译在 /home/Neil/ActivePerl-5.12/lib/Errno.pm 第 8 行中止。
在 /home/Neil/ActivePerl-5.12/lib/File/Temp.pm 第 148 行的要求中编译失败。
BEGIN 失败——编译在 /home/Neil/ActivePerl-5.12/lib/File/Temp.pm 第 148 行中止。
在 /home/Neil/ActivePerl-5.12/lib/Archive/Zip.pm 第 14 行的要求中编译失败。
BEGIN 失败——编译在 /home/Neil/ActivePerl-5.12/lib/Archive/Zip.pm 第 14 行中止。
在 -e 第 459 行的要求中编译失败。
/home/Neil/ActivePerl-5.12/site/bin/pp:无法从 'PAR::StrippedPARL::Static' 提取 parl 到 /home/Neil/ActivePerl-5.12/site/lib/PAR 的文件 'parludZfldz' /Packer.pm 第 1172 行,第 1 行。
[bash-3.2][尼尔@威利]$  


[bash-3.2][Neil@willy]$ /home/Neil/ActivePerl-5.12/bin/cpan -l | grep PAR
标准杆 1.002
PAR::Dist 0.47
PAR::重 0.12
PAR::过滤器 0.03
PAR::SetupTemp 1.002
PAR::SetupProgname 1.002
PAR::Packer 1.006
PAR::StrippedPARL::动态 0.958
PAR::StrippedPARL::静态 0.958
PAR::StrippedPARL::Base 0.975
PAR::Filter::字节码 undef
PAR::Filter::Bleach undef
PAR::Filter::混淆 undef
PAR::Filter::PatchContent undef
PAR::Filter::PodStrip undef
应用程序::Packer::PAR 0.91
4

4 回答 4

3

我有同样的问题。我从 Activestate Perl 包管理器 (PPM) 安装了 PAR::Packer。如上所述,在其中一个回复中,perl 和 pp 二进制文件之间存在版本不匹配。这是我修复它的方法:

  1. 从 PPM 卸载 PAR-Packer。
  2. 打开 DOS 命令行。
  3. cpan install PAR::Packer

这将从 CPAN 下载、编译和安装包。如果需要,也会下载 MinGW 编译器工具链。在较慢的 CPU 上,整个过程可能需要一段时间。

于 2011-01-20T15:20:35.793 回答
3

Perl lib 版本 (5.12.2) 与可执行版本 (v5.12.0) 不匹配

Perl 安装的某些部分与其他部分的版本不同。更具体地说,如果您查看/home/Neil/ActivePerl-5.12/lib/Config.pm第 50 行,您将看到正在执行的 Perl 版本(即 5.12.0)与正在使用的 Config.pm 库的版本(5.12.2)有一个明确的比较。

如果您执行 ActivePerl 5.12.2 的新安装(将所有组件升级到相同版本),该错误应该会消失。

于 2010-10-07T16:14:25.533 回答
2

找到那个的位置pp,然后找出它的版本。我敢打赌它是早期安装遗留下来的。确保您的新版本 Perl 具有 PAR。

您还可以尝试指定pp要使用的特定位置,以便确切知道您使用的是什么:

 $ /full/path/to/5.12.2/pp ...
于 2010-10-07T17:34:37.153 回答
0

转到 perl/lib/Config.pm 并更改以下行中的条件:

die "$0: Perl lib version (5.32.0) doesn't match executable '$^X' version ($])" unless $^V;

die "$1: Perl lib version (5.32.1) doesn't match executable '$^X' version ($])" unless $^V;

和下一行

$^V eq 5.32.0 or die sprintf "%s: Perl lib version (5.32.0) doesn't match executable '$^X' version (%vd)", $0, $^V;

$^V eq 5.32.1 or die sprintf "%s: Perl lib version (5.32.1) doesn't match executable '$^X' version (%vd)", $0, $^V;

这对我有用,至少它不会抱怨……是的,我知道,PERL 和 Python 已经搞砸了。

于 2021-04-16T00:44:25.087 回答