开发者

Why do I get "version (5.12.2) doesn't match executable version" with Perl's PAR?

When I run the following to create an executable out of my Perl script:

pp -o process_target_mode_data Process_Target_Mode_Data.pl

I get the following error output:

 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.

Could someone explain to me what is going on and how I can resolve this problem?

Info brian d foy requested:

[bash-3.2][Neil@willy]$  which pp
/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 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 'parludZfldz' at /home/Neil/ActivePerl-5.12/site/lib/PAR/Packer.pm line 1172,  line 1.
[bash-3.2][Neil@willy]$  


[bash-3.2][Neil@willy]$  /home/Neil/ActivePerl-5.12/bin/cpan -l | grep PAR
PAR     1.002
PAR::Dist       0.47
PAR::Heavy      0.12
PAR::Filter     0.03
PAR::SetupTemp  1.002
PAR::SetupProgname      1.002
PAR::Packer     1.006
PAR::StrippedPARL::Dynamic      0.958
PAR::StrippedPARL::Static       0.958
PAR::StrippedPARL::Base 0.975
PAR::Filter::Bytecode   undef
PAR::Filter::Bleach     undef
PAR::Filter::Obfuscate  undef
PAR::Filter::PatchContent       undef
PAR::Filter::PodStrip   undef
App::Packer::PAR        0.91


Perl lib version (5.12.2) doesn't match executable version (v5.12.0)

Some parts of your Perl installation are at a different version than others. More specifically, if you look at /home/Neil/ActivePerl-5.12/lib/Config.pm line 50, you will see that there is an explicit comparison of the version of Perl being executed (which is 5.12.0) to the version of the Config.pm library being used (5.12.2).

If you perform a new installation of ActivePerl 5.12.2 (to bring all components up to the same version), this error should go away.


I had same issue. I installed PAR::Packer from Activestate Perl Package Manager (PPM). As mentioned above in one of the replies, there is version mismatch between the perl and pp binaries. Here's how I fixed it:

  1. Uninstall PAR-Packer from PPM.
  2. Open DOS command line.
  3. Run cpan install PAR::Packer

This will download, compile, and install the package from CPAN. MinGW compiler toolchain will be downloaded as well, if needed. The whole process may take a while on slower cpus.


Find the location of that pp, then figure out its version. I bet it's left over from an earlier installation. Ensure that you have PAR for your new version of Perl.

You can also try specifying the location of the particular pp you want to use so you know exactly what one you are using:

 $ /full/path/to/5.12.2/pp ...


Go to the perl/lib/Config.pm and changed the condition in the lines:

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

to

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

and the next line

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

to

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

this worked for me, at least it won't complain... yes, i know, PERL and Python are f***d up.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜