私はサイラスのseiveshellをコンパイルするとき、どのように私は、PostgreSQLのLIBSにリンクすることができますか?

StackOverflow https://stackoverflow.com/questions/1293506

質問

私は他のものの間で、PerlとサイラスIMAPからなるソフトウェアスタックを維持します。

Perlが正常に動作しているようだとサイラスのcyradmで(perlスクリプト)も正常に動作します。しかし、sieveshellはここに助けを求めるために実行した理由はありません。

私はsieveshell実行すると、私は次の出力を取得します:

  

読み込むことができません「/usr/local/pozix/perl-5.10.0/lib/site_perl/5.10.0/i686-linux-thread-multi/auto/Cyrus/SIEVE/managesieve/managesieve.so」のモジュールサイラス:: SIEVE :: managesieve:/usr/local/pozix/perl-5.10.0/lib/site_perl/5.10.0/i686-linux-thread-multi/auto/Cyrus/SIEVE/managesieve/managesieve.so:未定義のシンボル:/usr/local/pozix/perl-5.10.0/lib/5.10.0/i686-linux-thread-multi/DynaLoader.pm線203でPQfinish。    ./sieveshell 45行で   コンパイルは./sieveshellライン45で必要に失敗しました。   失敗したBEGIN - ./sieveshell 45行で中止され、コンパイル

PQfinishは、PostgreSQLのライブラリの一部です。私はmanagesieve.so上でlddを実行した場合、PGSQLのLIBSは、しかし、中にリンクされていない、何も不足しているライブラリは、どちらか存在しません。私が記載されているlibsasl2ライブラリでのlddを実行した場合、それはあまりにもOKに見え、それがPGSQLを使用していますが、それは明らかにmanagesieve.soするためにリンクされたライブラリの一部ではありません。他のソフトウェアで使用された場合また、libsasl2が正常に動作してます。

ここでLDD managesieve.so

linux-gate.so.1 =>  (0xffffe000)
libdb-4.4.so => /lib/libdb-4.4.so (0xb7f8a000)
libsasl2.so.2 => /usr/local/pozix/cyrus-sasl/lib/libsasl2.so.2 (0xb7f74000)
libssl.so.0 => /usr/lib/libssl.so.0 (0xb7f33000)
libcrypto.so.0 => /usr/lib/libcrypto.so.0 (0xb7df6000)
libc.so.6 => /lib/libc.so.6 (0xb7caa000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7c92000)
libdl.so.2 => /lib/libdl.so.2 (0xb7c8e000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb7c7b000)
/lib/ld-linux.so.2 (0xb80aa000)

lddはUSR /ローカル/ pozix /サイラス-SASL / libに/ libsasl2.so.2

linux-gate.so.1 =>  (0xffffe000)
libdl.so.2 => /lib/libdl.so.2 (0xb7f0a000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb7ef7000)
libc.so.6 => /lib/libc.so.6 (0xb7dab000)
/lib/ld-linux.so.2 (0xb7f34000)

コンパイルエラーは、いずれかのCyrus IMAPの建物の間にありません。私は、これは、パスの問題ではなく見えるか、パスの出力をデバッグする場合や、この上で、次へ行くことがどこかわからない可能性が疑わます。

このためにグーグルでしようとしたカップルのヒットを得たが、それらのいずれかが解決策を持っていたか、私のために動作しませんでした。私はPerlのAUTOLOADが何らかの方法で混乱している疑いがあります。 DBD :: Pgが同様に働いているように見えます。バージョン2.15.1を使用します。

次どこへ行く上の任意の提案?そこに任意のPerlの達人?

解決しよう!

./ configureは各サブディレクトリ内のMakefileを作成します。 managesieve.soライブラリはPerlの...すなわちからの呼び出しで作成されますMakefileの結果としてのPerl Makefile.PL。アンドリューのアドバイスはこれを追跡するには非常に役立ちました。 Makefileの次の行があります:

EXTRALIBS = -ldb-4.4 -L/usr/local/pozix/cyrus-sasl/lib -lsasl2 -lssl -lcrypto 
LDLOADLIBS = -ldb-4.4 -L/usr/local/pozix/cyrus-sasl/lib -lsasl2 -lssl -lcrypto 

私は読むために更新され、どのます:

EXTRALIBS = -ldb-4.4 -L/usr/local/pozix/cyrus-sasl/lib -L/usr/local/pozix/pgsql/lib -lsasl2 -lssl -lcrypto -lpq

LDLOADLIBS = -ldb-4.4 -L/usr/local/pozix/cyrus-sasl/lib -L/usr/local/pozix/pgsql/lib -lsasl2 -lssl -lcrypto -lpq

そして、これはそれを解決!

役に立ちましたか?

解決

あなたはふるい共有ライブラリを再コンパイルする必要があると含まのような音の -lPGSql の(または何でも)。あなたに「--with-postgresの」を追加する必要があるのの設定のスクリプトはありますか?ない場合は、手動でのMakefile(またはMakefile.PL、またはBuild.PL)を編集する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top