1

私は 64 ビットの Solaris 10 を実行しており、自己コンパイルされた Perl 5.10 と Postgresql 8.4.1 を /usr/local にインストールしました。どちらも 64 ビットです。Solaris には 32 ビットの Postgresql 8.1.4 が /usr にインストールされていましたが、実行されていません。DBD::Pg をインストールしようとすると、見つけた libpq.so が /usr/local/pgsql/lib の 64 ビットではなく、/usr/lib の 32 ビットであるため、問題が発生します。

# /usr/local/bin/cpanp -i DBD::Pg
DBD::Pg のインストール (2.15.1)
...
ld: 致命的: ファイル /usr/lib/libpq.so: 間違った ELF クラス: ELFCLASS32

私が最初に考えたのは、バンドルされている Postgres を削除することでしたが、それに対するアドバイスを読みました。32 ビットの Perl で最初からやり直せばすべてがうまくいくと確信していますが、私は自分が持っているものに固執したいと思っています。

CPAN 出力で、makefile がリンク前に LD_RUN_PATH=/usr/lib を設定していることに気付きました。それは変更すべきもののように思えますが、変更方法がわかりません (CPAN によってすべて自動化されているため)。また、そのような変更がもたらす可能性のある他の副作用についてもわかりません。正しいディレクトリ /usr/local/pgsql/lib がパスにまったくないように見えるので、32 ビット版を非表示にしなくても、それを表示するだけで問題が解決するかもしれませんが、わかりませんやり方も。

このモジュールを自分の環境でコンパイルするにはどうすればよいですか、またはモジュールがそのままコンパイルされるように環境を変更するにはどうすればよいですか?

4

1 に答える 1

3

http://cpansearch.perl.org/src/TURNSTEP/DBD-Pg-2.15.1/Makefile.PLから

簡単に言えば:

デフォルトでは、Makefile.PL は App::Info を使用して PostgreSQL ライブラリの場所を見つけ、ディレクトリを含めます。ただし、自分で制御したい場合は、環境変数 POSTGRES_INCLUDE および POSTGRES_LIB を定義するか、POSTGRES_HOME のみを定義してください。SSL をサポートする PostgreSQL をコンパイルした場合は、POSTGRES_LIB 環境変数を定義し、次のように「-lssl」を追加する必要があることに注意してください。

export POSTGRES_LIB="/usr/local/pgsql/lib -lssl"
于 2009-12-03T00:34:24.747 に答える