Come posso collegare contro le librerie di PostgreSQL quando compilo seiveshell di Cyrus?
-
18-09-2019 - |
Domanda
I mantenere uno stack software costituito da Perl e Cyrus IMAP tra le altre cose.
Perl sembra funzionare bene e Cyrus cyradm (uno script perl) funziona bene anche. Tuttavia, sieveshell non verrà eseguito e la ragione per chiedere aiuto qui.
Quando eseguo sieveshell, ottengo l'uscita segue:
Impossibile caricare '/usr/local/pozix/perl-5.10.0/lib/site_perl/5.10.0/i686-linux-thread-multi/auto/Cyrus/SIEVE/managesieve/managesieve.so' per modulo 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: simbolo indefinito: PQfinish a /usr/local/pozix/perl-5.10.0/lib/5.10.0/i686-linux-thread-multi/DynaLoader.pm linea 203. alla riga 45 ./sieveshell Compilazione fallito nel richiedere alla linea ./sieveshell 45. BEGIN fallito -. Compilation interrotta in linea ./sieveshell 45
PQfinish fa parte delle librerie di PostgreSQL. Se corro ldd su managesieve.so, le librerie di PGSQL non sono collegati in tuttavia, non ci sono librerie mancanti sia. Se corro ldd su libreria libsasl2 elencati, sembra OK troppo e lo fa usare PGSQL ma non è apparentemente parte della libreria legata al managesieve.so. Inoltre, libsasl2 sta lavorando bene quando viene utilizzato da altri software.
Ecco 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)
Non ci sono errori di compilazione durante la costruzione di Cyrus IMAP sia. Ho il sospetto che questo potrebbe essere un problema di percorso, ma non è sicuro dove guardare o eseguire il debug l'uscita percorso o dove andare avanti su questo.
Ho provato googling per questo e ha ottenuto un paio di colpi ma o non ha avuto soluzione o non ha funzionato per me. Ho il sospetto che il Perl AUTOLOAD è confuso in qualche modo. DBD :: Pg sembra funzionare pure; utilizzando la versione 2.15.1.
Tutti i suggerimenti su dove andare dopo? Qualsiasi Perl guru là fuori?
RISOLTO!
./ configure costruisce il Makefile in ogni sotto-directory. La biblioteca managesieve.so viene creato con una chiamata da Perl ... OSSIA Perl Makefile.PL risultante in un Makefile. consiglio di Andrew ha aiutato immensamente nel tracciare questo in giù. Nel Makefile vi sono le seguenti linee:
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
Il che ho aggiornato a leggere:
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 questo è risolto!
Soluzione
Sembra che avete bisogno di ri-compilare la libreria vaglio condivisa e include il -lPGSql (o qualsiasi altra cosa). Esiste un configure script che è necessario aggiungere un '--with-postgres' a? In caso contrario, potrebbe essere necessario modificare manualmente il Makefile (o Makefile.PL o Build.PL).