Pergunta

Eu mantenho uma pilha de software que consiste em Perl e Cyrus IMAP entre outras coisas.

Perl parece estar bem trabalhando e Cyrus cyradm (um script Perl) funciona bem também. No entanto, sieveshell não vai executar e razão para pedir ajuda aqui.

Quando eu executo sieveshell, recebo a saída a seguir:

Não é possível carregar '/usr/local/pozix/perl-5.10.0/lib/site_perl/5.10.0/i686-linux-thread-multi/auto/Cyrus/SIEVE/managesieve/managesieve.so' para módulo Cyrus :: PENEIRA :: managesieve: /usr/local/pozix/perl-5.10.0/lib/site_perl/5.10.0/i686-linux-thread-multi/auto/Cyrus/SIEVE/managesieve/managesieve.so: símbolo indefinido: PQfinish na linha /usr/local/pozix/perl-5.10.0/lib/5.10.0/i686-linux-thread-multi/DynaLoader.pm 203. a linha 45 ./sieveshell Compilação falhou em exigir pelo ./sieveshell linha 45. BEGIN falhou -. Compilação abortado em ./sieveshell linha 45

PQfinish faz parte das bibliotecas do PostgreSQL. Se eu executar ldd em managesieve.so, as libs PGSQL não estão ligados no entanto, não há bibliotecas que faltam tanto. Se eu executar ldd na biblioteca libsasl2 listado, parece OK também e ele faz uso PGSQL mas, aparentemente, não é parte da biblioteca ligada à managesieve.so. Além disso, libsasl2 está funcionando bem quando usado por outro software.

Aqui está 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)

Não há erros de compilação durante a construção do Cyrus IMAP também. Eu suspeito que isso poderia ser um problema do caminho, mas não sabe para onde olhar ou depurar a saída caminho ou para onde ir com isso.

tentei googling para isso e tenho um par de sucessos, mas eles nem tinha nenhuma solução ou não funcionou para mim. Eu suspeito que o Perl AUTOLOAD é confundido de alguma forma. DBD :: Pg parece estar funcionando bem; usando a versão 2.15.1.

Todas as sugestões sobre onde ir em seguida? Qualquer Perl gurus lá fora?

resolvido!

./ configure constrói os Makefiles em cada sub-diretório. A biblioteca managesieve.so é criado com uma chamada de Perl ... OU SEJA Perl Makefile.PL resultando em um Makefile. aconselhar de Andrew ajudou imensamente em seguir esse baixo. No Makefile existem as seguintes linhas:

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 

O que eu atualizei para ler:

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

E isso resolveu!

Foi útil?

Solução

Parece que você precisa para re-compilar a biblioteca peneira compartilhada e incluir o -lPGSql (ou qualquer outro). Existe uma configure script que você precisa adicionar um '--with-postgres' para? Se não, você pode ter que editar manualmente o Makefile (ou Makefile.PL, ou Build.PL).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top