2009-02-27 55 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 ....运行

相关问题