12

HP unix/Solaris ホスト上の cygwin Windows で開発した Perl アプリケーションを実行する必要があります。私は UNIX マシンのスーパーユーザーではありません。デフォルトの Perl モジュールの場所にアクセスすることも、モジュールをデフォルトの Perl モジュールの場所にインストールすることもできません。また、UNIX のインストールにはほとんどの基本的なモジュールが欠けており、それを変更することはできません。

たとえば、ネイティブ C でコンパイルされた部分を持つExpectを必要とする Perl アプリケーションがあります。そのボックスに他に何もインストールせずに、必要な依存関係を使用してこのアプリケーションを unix に展開するにはどうすればよいでしょうか?

Cygwin Windows で Perl アプリケーション全体をビルドし、1 つの実行可能ファイルを unix にロールアウトして、そこのホーム ディレクトリから実行する方法はありますか?


これまでの回答に基づくEDITの追加:

特に brian に感謝します。ネイティブ Perl の場合、ローカル LIB dir ソリューションは機能するようですが、C コンポーネントを必要とする Perl モジュールの場合、クロスプラットフォーム コンパイル、つまり cygwin でコンパイルして Solaris で実行することは、私が恐れていたように実際には不可能です。 .

しかし、別の Linux インストールが役立つでしょうか。つまり、これは Linux 上のパッケージ Perl のような異なるフレーバーの Unix 間でより簡単に実行でき、Solaris/HP に展開できますか? そして、lccのようなものはどうですか?

また、複雑な Perl アプリのすべての依存関係を含むネイティブ Perl パッケージを Windows に展開し、それを 1 つのファイルとして unix に移動できるようにした場合、もう少し聞きたいと思いますか? (Expect.pm のようにネイティブ C コードが含まれている場合は動作しないことがわかりましたが、純粋な perl モジュールのみを使用するアプリの場合はどうなりますか?)

基本的に、多くの理由から、これらの「本番」UNIX ホストにログインするのに必要な時間を最小限に抑え、事前にローカルでできる限りのことをしようとしています。


元の perl の質問から離れすぎていると感じたので、新しいクロスコンパイルの質問を追加しました。


編集 -- Parは純粋な Perl に対して有望に見えますが、同じ取引ですが、ネイティブ拡張のクロスプラットフォーム コンパイルの問題を解決するようには見えません。

4

7 に答える 7

2

local::libが必要です。これが完了したら、純粋な Perl モジュールはクロス プラットフォームで動作するはずですが、コンパイル済みのモジュールを特定して、外国のプラットフォームに再インストールする必要があります。実際の UNIX で初期インストールを行います。cygwin の cpan は遅いです。

于 2009-02-20T21:57:24.913 に答える
2

私は自分の仕事用システムでこれに何度か遭遇しました。Perl 5.8 のベース インストールがあり、モジュールを追加する機能がありません。私が使用するソリューションは次のとおりです。

  1. プロジェクトルートに「lib」というフォルダーを作成します (例: ~/projects/MyProject/lib)
  2. CPAN からダウンロードするモジュールには、Makefile と「lib」というディレクトリが必要です。lib フォルダーの内容を、新しく作成した lib フォルダーにコピーします。一部のモジュールには、単一の .pm ファイルのみが含まれ、lib 構造が含まれていない場合があります。.pm ファイルをコピーするだけです。

コードは次のようにする必要があります。まず、通常どおりにインストールされたモジュールを使用し、次に @INC 環境変数のシフトを解除して、ローカル ライブラリを使用します。

# Declare Includes --------------------------------------------------------------------------------
use Getopt::Long;
use vars qw($VERSION);
use DirHandle;
use FileHandle;


# Force perl to use our local 'lib' directory for imported modules, this allows us to
# use modules without having to install them in th emain perl assembly. However, this
#also prevents these modules from being used in other projects.
BEGIN { unshift @INC, "lib"; }
use Error qw(:try);
use SOAP::Transport::HTTP;
#use LWP::Protocol::https;
use XML::Simple;
use XML::Writer;
use XML::Writer::String;

このメソッドの注意点は、一部の Perl モジュールが「lib」メソッドを使用していないか、追加の依存関係を持っていないことです。問題が発生した場合は、モジュールの Makefile.PL を調べて、その動作を確認してください。

于 2009-02-20T22:53:10.380 に答える
2

環境変数PERLLIBを自分の Perl lib ディレクトリに設定するか、-I コマンド ライン スイッチを Perl に使用してそれを示します。

HP-UX マシンにアクセスできる場合は、Expect をコンパイルしてディレクトリにインストールできます。しかし、Windows から HP-UX へのクロス コンパイルはおそらくはるかに困難です。GCC クロス コンパイラをビルドする必要があります。

于 2009-02-20T18:47:52.997 に答える