Как я могу ссылаться на библиотеки PostgreSQL при компиляции Seiveshell?
Я поддерживаю программный стек, состоящий из 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::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 в /usr/local/pozix/perl-5.10.0/lib/5.10.0/i686-linux-thread-multi/DynaLoader.pm, строка 203. at ./sieveshell, строка 45 Компиляция не удалась, требуется в строке./sieveshell 45. НАЧАЛО сбой - компиляция прервана в строке./sieveshell 45.
PQfinish является частью библиотек PostgreSQL. Если я запускаю ldd на managesieve.so, библиотеки PGSQL не связаны между собой, однако нет и отсутствующих библиотек. Если я запускаю ldd в указанной библиотеке libsasl2, она тоже выглядит нормально и использует 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 / 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 в каждом подкаталоге. Библиотека 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
И это решило это!
1 ответ
Похоже, вам нужно пересобрать общую библиотеку sieve и включить -lPGSql (или что-то еще). Есть ли скрипт configure, к которому нужно добавить "--with-postgres"? Если нет, вам, возможно, придется вручную редактировать Makefile (или Makefile.PL, или Build.PL).