当我编译Cyrus的seiveshell时,如何链接PostgreSQL库?

时间:2009-08-18 12:25:22

标签: postgresql perl sieve-language cyrus

我维护了一个由Perl和Cyrus IMAP组成的软件堆栈。

Perl似乎工作正常,Cyrus 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'模块Cyrus :: SIEVE :: managingieve:/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 line 45   在./sieveshell第45行的require中编译失败。   BEGIN失败了 - 汇编在./sieveshell第45行中止。

PQfinish是PostgreSQL库的一部分。如果我在managesieve.so上运行ldd,则PGSQL库没有链接,但是也没有丢失的库。如果我在列出的libsasl2库上运行ldd,它看起来也可以,它确实使用PGSQL,但它显然不是链接到managesieve.so的库的一部分。此外,libsasl2在被其他软件使用时工作正常。

这是ldd manageieve.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)

在构建Cyrus IMAP期间也没有编译错误。我怀疑这可能是一个路径问题,但不确定在哪里查看或调试路径输出或接下来要去哪里。

尝试谷歌搜索并获得了几次点击,但他们要么没有解决方案,要么没有为我工作。我怀疑Perl AUTOLOAD在某种程度上是混淆的。 DBD :: Pg似乎也在起作用;使用版本2.15.1。

关于下一步该怎么做的任何建议?那里有Perl大师吗?

解决!

./ configure在每个子目录中构建Makefile。 manageieve.so库是通过Perl ... I.E.的调用创建的。 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

这解决了它!

1 个答案:

答案 0 :(得分:0)

听起来你需要重新编译筛子共享库并包含 -lPGSql (或其他)。是否有 configure 脚本需要添加'--with-postgres'?如果没有,您可能必须手动编辑Makefile(或Makefile.PL或Build.PL)。