2010-10-07 37 views
2

當我運行下面以我的Perl腳本的創建可執行文件:爲什麼我用Perl的PAR獲得「version(5.12.2)與可執行版本不匹配」?

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. 

有人能向我解釋是怎麼回事,如何我可以解決這個問題嗎?

要求

信息布萊恩d FOY:

 
[bash-3.2][[email protected]]$ which pp 
/home/Neil/ActivePerl-5.12/site/bin/pp 

[bash-3.2][[email protected]]$ /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][[email protected]]$ 


[bash-3.2][[email protected]]$ /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 
+0

您是否用ppm安裝了PAR :: Packer? – 2010-10-07 21:18:58

+0

是的,我做到了。我甚至刪除了有關Perl 5.12.2安裝的所有內容,然後重新安裝。不幸的是我仍然得到相同的結果。 – 2010-10-07 21:59:13

回答

2

的Perl庫版本(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的全新安裝(以使所有組件達到相同版本),則此錯誤應該消失。

+0

我剛剛在運行上面的「pp」示例之前安裝了此版本的Perl。 ActiveState Perl在安裝過程中構建Config.pm。如果發生這種情況,我認爲有安裝錯誤。 – 2010-10-07 16:22:49

+0

@Horace:你運行的Perl可執行文件只有5.12.0;你確定你做了一個完整的乾淨安裝(不是在舊安裝的頂部)? – Ether 2010-10-07 16:38:40

+0

是的。是否有可能Config.pm(我在安裝Perl 5.12.2時生成的)將版本字符串5.12.2與其他屬於PAR的一部分的版本字符串進行比較:Packer.pm,它的版本字符串是5.12.0? – 2010-10-07 17:37:01

2

找到那個位置pp,然後找出它的版本。我敢打賭它是從早期的安裝中遺留下來的。確保你有新版本的Perl的PAR。

您也可以嘗試指定要使用的特定pp的位置,所以你知道你使用的正是一個:

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

brian - 我嘗試了你的建議。它沒有任何區別。 – 2010-10-07 18:32:11

+0

展開你的問題,向我們展示你所嘗試的是什麼,你得到了什麼答案等。我們無法用心靈的力量來幫助你。 – 2010-10-07 18:45:44

+0

布萊恩 - 我有。在這篇文章的頂部,我詳細描述了我在命令行輸入的內容以及我得到的確切結果。不需要任何精神力量。 – 2010-10-07 19:36:27

3

我有同樣的問題。我從ActiveState Perl Package Manager(PPM)安裝了PAR :: Packer。正如上面在其中一個回覆中提到的,perl和pp二進制文件之間存在版本不匹配。以下是我如何修復它:

  1. 從PPM卸載PAR-Packer。
  2. 打開DOS命令行。
  3. 運行cpan install PAR::Packer

這將下載,編譯,並從CPAN安裝軟件包。如果需要,MinGW編譯器工具鏈也將被下載。整個過程可能需要一段時間才能完成。

相關問題