2009-08-18 10 views
0

私は、他にもPerlとCyrus IMAPからなるソフトウェアスタックを維持しています。Cyrusのseiveshellをコンパイルすると、PostgreSQLのライブラリとリンクできますか?

Perlはうまく動作しているようですが、Cyrus cyradm(perlスクリプト)もうまく動作します。しかし、篩板は実行されず、ここで助けを求める理由があります。

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

は「/usr/local/pozix/perl-5.10.0/lib/site_perl/5.10.0/i686-linuxを読み込むことができません-thread-multi/auto/Cyrus/SIEVE/managesieve/managesieve.so 'モジュール用Cyrus :: 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:未定義シンボル:PQfinish at /usr/local/pozix/perl-5.10.0/lib/5.10.0/i686-linux-thread-multi/ DynaLoader.pm行203. at ./sieveshell行45 ./sieveshell行45でのコンパイルに失敗しました。 BEGINは失敗しました./sieveshell行45でコンパイルが中止されました。

PQfinishはPostgreSQLライブラリの一部です。 managesieve.soでlddを実行すると、PGSQLライブラリはリンクされません。欠けているライブラリもありません。リストされたlibsasl2ライブラリでlddを実行すると、それも問題ないと思われます。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の教祖がいますか?

SOLVED!

./configureは、各サブディレクトリにMakefileをビルドします。 managesieve.soライブラリは、Perl ... I.E.からの呼び出しで作成されます。 Perl Makefile.PLはMakefileを生成します。 Andrewのアドバイスは、これを追跡するのに非常に役立ちました。私は読むために更新さ

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 

そして、これはそれを解決したMakefileの次の行があります!

答えて

0

シーブ共有ライブラリを再コンパイルし、-lPGSql(または何でも)を含める必要があります。 スクリプトに '--with-postgres'を追加する必要がありますか?そうでない場合は、Makefile(またはMakefile.PLまたはBuild.PL)を手作業で編集する必要があります。

+0

次のようにはい、configureスクリプトが呼び出されます。 は./configure --prefix = $ POZIX_ROOT/$品名 - $ VERSION \ --with-のcyrus-プレフィックス= $ POZIX_ROOT/$品名 - $ VERSION/libexecに\ --enable-アイドル --with-AUTH \ --enable-殺人= UNIX \ --with-のcyrus-ユーザー=サイラスの\ --with-サイラス・グループ=メール\ --with- \ pgsqlの= $ POZIX_ROOT/pgsqlの\ --with-SASL = $ POZIX_ROOT /サイラス-SASL \ --with-サービス・パス= $ POZIX_ROOT/$品名 - $ VERSION /サービスの$ POZIX_ROOTが先にで定義されて Bashスクリプト makeに従ってください。make all&make install。 – Eric

+0

私が言うことができないのはこれです:もし私がMakefileを編集するのであれば、どちらですか? SASL2または管理するものは?私はPQfinishがどこで参照されているのか、libpq.soがどこにリンクされているのかわかりません。PQfinishはlibpq.soの一部です。 grep PQfinishは: PQfinish PQfinish ありがとう! – Eric

+0

configureスクリプトで生成されたMakefileをチェックして、** - with-pgsql **が** - L **だけでなく** - ** **にも正しいライブラリを置くかどうかを確認します。次に、ライブラリパスにlibpq.soが含まれていることを確認します。 **文字列libpq.so **の代わりに** nm **を代わりに使用してみてください(マニュアルページを参照)。 PQfinishが輸出されたものではなく、輸入されたシンボルとして見えている場合、**文字列**で分かりません。 libpq.soの複数の異なるバージョンがないことを確認するもう1つのことを確認してください。適切なライブラリパスを取得するには、ライブラリパスを変更する必要があります。 –

関連する問題