0

私は、とりわけPerlとCyrusIMAPで構成されるソフトウェアスタックを維持しています。

Perlは正常に機能しているようで、Cyrus cyradm(perlスクリプト)も正常に機能しています。ただし、sieveshellは実行されず、ここで助けを求める理由があります。

sieveshellを実行すると、次の出力が得られます。

モジュールCyrusの「/usr/local/pozix/perl-5.10.0/lib/site_perl/5.10.0/i686-linux-thread-multi/auto/Cyrus/SIEVE/managesieve/managesieve.so」を読み込めません: :SIEVE :: manageieve:/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 line 203. at ./sieveshellline45コンパイルがrequireat./sieveshelllineで失敗しました45.BEGINが失敗しました-./sieveshell行45でコンパイルが中止されました。

PQfinishはPostgreSQLライブラリの一部です。managesieve.soでlddを実行すると、PGSQLライブラリはリンクされませんが、不足しているライブラリもありません。リストされているlibsasl2ライブラリでlddを実行すると、それも問題ないように見え、PGSQLを使用しますが、managesieve.soにリンクされているライブラリの一部ではないようです。さらに、libsasl2は、他のソフトウェアで使用すると正常に動作します。

これがlddmanagesieve.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 / local / pozix / cyrus-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)

CyrusIMAPの構築中にもコンパイルエラーはありません。これはパスの問題である可能性がありますが、パス出力をどこで調べたりデバッグしたりするのか、次にどこに進むのかがわかりません。

これをグーグルで試したところ、2回ヒットしましたが、解決策がないか、うまくいきませんでした。PerlAUTOLOADが何らかの形で混乱しているのではないかと思います。DBD::Pgも機能しているようです。バージョン2.15.1を使用します。

次にどこに行くべきかについての提案はありますか?そこにPerlの達人はいますか?

解決しました!

./configureは、各サブディレクトリにMakefileを作成します。managesieve.soライブラリは、Perlからの呼び出しで作成されます... IE Perl Makefile.PLは、Makefileになります。アンドリューのアドバイスは、これを追跡するのに非常に役立ちました。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

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

4

1 に答える 1

0

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

于 2009-08-18T12:39:18.887 に答える