Comment puis-je établir un lien avec les libs PostgreSQL quand je compile le seiveshell de Cyrus?

StackOverflow https://stackoverflow.com/questions/1293506

Question

Je maintiens une pile logicielle composée de Perl et Cyrus IMAP entre autres.

Perl semble fonctionner très bien et Cyrus cyradm (un script perl) fonctionne bien aussi. Cependant, sieveshell ne sera pas exécuter et la raison de demander de l'aide ici.

Quand je lance sieveshell, je reçois la sortie suivante:

  

Impossible de charger « /usr/local/pozix/perl-5.10.0/lib/site_perl/5.10.0/i686-linux-thread-multi/auto/Cyrus/SIEVE/managesieve/managesieve.so » pour Module Cyrus :: TAMIS :: managesieve: /usr/local/pozix/perl-5.10.0/lib/site_perl/5.10.0/i686-linux-thread-multi/auto/Cyrus/SIEVE/managesieve/managesieve.so: symbole non défini: PQfinish à la ligne 203 /usr/local/pozix/perl-5.10.0/lib/5.10.0/i686-linux-thread-multi/DynaLoader.pm.    à la ligne 45 ./sieveshell   La compilation a échoué dans la ligne de besoin ./sieveshell 45.   BEGIN a échoué -. Compilation avortée à la ligne ./sieveshell 45

PQfinish fait partie des bibliothèques PostgreSQL. Si je lance ldd sur managesieve.so, les libs PGSQL ne sont pas liés à cependant, il n'y a pas de bibliothèques manquantes soit. Si je lance ldd sur la bibliothèque libsasl2 la liste, il semble bien aussi et il utilise PGSQL mais il est apparemment pas partie de la bibliothèque liée à managesieve.so. De plus, libsasl2 fonctionne bien lorsqu'il est utilisé par d'autres logiciels.

Voici 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)

Il n'y a pas d'erreurs de compilation lors de la construction de Cyrus IMAP soit. Je soupçonne que cela pourrait être un problème de chemin, mais pas sûr où chercher ou déboguer la sortie du chemin ou où aller à ce sujet.

J'ai essayé googler pour cela et a obtenu un succès couple mais ils avaient soit pas de solution ou n'a pas fonctionné pour moi. Je soupçonne que le Perl AUTOCHARGE est confus d'une certaine façon. DBD :: Pg semble fonctionner aussi bien; en utilisant la version 2.15.1.

Toutes les suggestions sur où aller? Tous Perl gourous là-bas?

RESOLU!

./ configure construit le Makefile dans chaque sous-répertoire. La bibliothèque managesieve.so est créé avec un appel de Perl ... C.-À Perl Makefile.PL résultant dans un Makefile. Le conseil d'Andrew énormément aidé dans le suivi de cette baisse. Dans le Makefile il y a les lignes suivantes:

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 

Ce que je mis à jour comme suit:

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

Et ce a résolu le problème!

Était-ce utile?

La solution

On dirait que vous avez besoin de recompiler le tamis bibliothèque partagée et inclure -lPGSql (ou autre). Y at-il un configure script que vous devez ajouter un '--with-postgres' à? Sinon, vous devrez peut-être modifier manuellement le Makefile (ou Makefile.PL, ou Build.PL).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top