私は 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 ビット版を非表示にしなくても、それを表示するだけで問題が解決するかもしれませんが、わかりませんやり方も。
このモジュールを自分の環境でコンパイルするにはどうすればよいですか、またはモジュールがそのままコンパイルされるように環境を変更するにはどうすればよいですか?