2009-02-27 7 views
4

私は、PerlアプリケーションをCygwinでパッケージ化し、HPUXで実行するためにPAR :: Packerを使用していました。なぜPerlのPARがSocket.pmのロード可能なオブジェクトを見つけられないのですか?

こんにちは簡単な世界では、例えば、うまく機能:

a.parになり
pp -p hello.pl 

して、HP-UX上:

parl a.par 

それは素晴らしい作品。

しかし-Bバンドルスイッチは、そのような運と多くの依存関係を持つ大きなアプリケーションでは、代わりに私がエラーを取得パッケージとき:Windowsの/ UNIXネットワークで

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

任意のアイデア、おそらくいくつかの問題が?すべての修正?

+0

あなたの第二編集として掲載されている可能性が回答。自分自身の質問に答えるのは大丈夫です:) – user55400

答えて

2

Perlのblixtorのアドバイス:クレジットの

ほとんどここアンドリュー・バーネットに行き、2重要な問題は、

ました
  1. ネイティブCコードライブラリ
  2. perlのLIBパス私は、HP-UX上で実行するためにパーを作成したcygwinのを取得するために、その後の手順は、私がBELた。ここ

ieveのステップは、任意のUNIX上で同じであるべきである:

続くアンドリューのアドバイスや頁-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 

は、UNIX上で「perlの-MCPAN -eシェル」を実行するには、ソケットがインストールされるべきで示したにもかかわらず、日まで:

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

そうでソケットを除いに加えて - Xスイッチは、私はまたwrapper.pl、中にちょうどこの1行でHP-UX上のラッパースクリプトを作成する必要がありました:私はparlを使用していない、これを実行するために、その後

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

、代わりに私はPerlでそれを呼び出すと、Iだろう

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

を何らかの理由でparlを使用している場合、デフォルトのlibパスは上記のフルパスしたがって、除外を受けるようだ:このように、-Iスイッチでデフォルトのlibパスに全体のパスを供給しなければなりませんでした。

5

これは、Socketが共有ライブラリを読み込み、プラットフォーム間で移植できないためです(つまり、LinuxではSocket共有ライブラリが動作しません)。

あなたは二つのことを試みることができる:あなたが共有ライブラリを必要とするすべての場所を特定し、ネイティブがあなたのターゲットプラットフォーム上でそれらをインストールする必要があり

  1. を。これらのモジュールをPARアーカイブから除外する必要があるかもしれません。
  2. 純粋なPerlの実装に切り替えます(移植性があります)。あなたがPerl、C、そしてあなたのターゲットプラットフォームで騒動がなく、純粋なPerlのバージョンが利用可能でないなら、あなたはこれで運が悪いかもしれません。
+0

ネイティブコードの問題は理にかなっていますが、ネイティブコードを含むこのソケット以外のモジュールが多すぎることはないので、最初のアプローチを試してみます。 依存関係をスキャンしてネイティブコードを含むものを出力する簡単な方法はありますか? –

+0

私は依存関係をスキャンする特に簡単な方法を考えることはできません。あなたは@INCにコードリーダを入れてDynaloaderの呼び出しを傍受しようとするかもしれませんが、おそらくModule :: Infoのようなものが良いでしょう。 –

+0

上記の私のアップデートを参照してください。何らかの理由でエラーが発生しましたが、HPUXの実行時にparlに追加する必要があるスイッチがありますか? –

2

実際のperlをHPUXにインストールする利点は、cygwinアプリケーションをhpux perlで実行できることです。 PARパッケージは通常どんな2つのプラットフォーム間でも動作しません。私の考えでは、cygwin上でhello.exeを作成し、それをHPUX上で実行しようとすることとまったく同じではありません。私は、「編集更新は」私はここで自分の質問に答えるために質問していた移動していたコメントから

0

FWIW、PARを携帯accross異なるプラットフォームになるように設計されていない - のlinux/HPUX上で実行するためにcygwinの上で作成されたパーパッケージを期待していない....

関連する問題