2009-02-27 58 views
4

我使用PAR :: Packer將我的Perl應用程序打包到Cygwin上,然後在HPUX上運行它。爲什麼Perl的PAR無法找到Socket.pm的可加載對象?

簡單的Hello World運作良好,例如:

pp -p hello.pl 

導致a.par,然後在HPUX:

parl a.par 

它的偉大工程。

然而,當包與-B束開關,沒有這樣的運氣許多依賴一個更大的應用程序,而不是我的錯誤:

Can't locate loadable object for module Socket in @INC 

任何想法,也許有些問題與Windows/Unix的網絡?任何修復?

+0

你的第二編輯可能已張貼作爲回答。可以回答自己的問題:) – user55400 2009-03-02 13:46:42

回答

2
從意見我而動「編輯更新」

的Perl blixtor的意見,我曾在這個問題回答我的問題在這裏:

大部分功勞這裏去安德魯巴尼特,2個關鍵問題是在

  1. 本地C代碼庫
  2. perl的LIB路徑

在這裏被我跟着來獲得創建面值上運行HP-UX在cygwin的步驟,我倍兒ieve步驟應約同於任何UNIX:

其次安德魯的意見,並移除了PP -X IO ::插座開關IO ::插座,但隨後在UNIX上運行產生PARL我會略微修改,但仍相關錯誤:

Can't locate Socket.pm in @INC (@INC contains: CODE(0x406ab018) CODE(0x4055c880) CODE(0x40563978)) at Net/Config.pm line 11 

即使運行「的perl -MCPAN -e殼」在UNIX表現出插座應安裝和使用最新的:

cpan[2]> install IO::Socket 
IO::Socket is up to date (1.30_01). 

所以除了不含插座與 - X開關abobe,我也不得不對HPUX創建一個包裝腳本,只有在這個1號線,wrapper.pl:

use PAR { file => 'bdiff.par', run => 'bdiff.pl' }; 

然後運行這個我沒有使用PARL,而是我只想用Perl和我叫它使用PARL的時候似乎在默認的lib路徑得到排除,因此以上的完整路徑

perl -I/lib/perl5/lib/5.10.0/PA-RISC2.0 -I/lib/lib/site_perl wrapper.pl allparameters 

出於某種原因:必須用-i選項提供給默認的lib路徑的整個路徑,像這樣。

5

你打,是因爲插座加載共享庫,這不是跨平臺移植的(即Windows上的套接字共享庫不會在Linux上運行不會在HPUX工作)。

您可以嘗試兩件事情:

  1. 確定需要共享庫的所有地方,和你的目標平臺上,它們的本地安裝。您可能還需要從PAR歸檔中排除這些模塊。
  2. 切換到純Perl實現(這是(更)便攜式)。如果您不是Perl,C和您的目標平臺的專家,並且純Perl版本尚不可用,那麼您可能會因此而失敗。
+0

謝謝,本地代碼問題很有意義,除了這個包含本地代碼的Socket之外,可能沒有那麼多模塊,所以我會嘗試第一種方法。 是否有一種簡單的方法來掃描依賴關係並打印出包含本地代碼的依賴關係? – 2009-02-27 21:20:06

2

在您的HPUX上安裝實際perl的優點是,您的cygwin應用程序可以在hpux perl上運行。 PAR包通常不會在任何兩個平臺之間工作。在我看來,它與在cygwin上生成hello.exe並嘗試在HPUX上運行hello.exe沒有任何區別。

0

FWIW,PAR是不是設計爲便攜式防空火炮不同的平臺 - 不要指望在Cygwin上創建了一個標準桿包在Linux/HPUX ....運行

相關問題