2009-12-02 14 views
1

Je suis sous Solaris 10 64 bits, et j'ai Perl 5.10 et Postgresql 8.4.1 auto-compilés installés dans/usr/local, les deux 64 bits. Solaris est livré avec Postgresql 8.1.4 32 bits installé dans/usr, mais il ne fonctionne pas. Lorsque j'essaie d'installer DBD :: Pg, il rencontre un problème car la libpq.so qu'il trouve est celle de 32 bits dans/usr/lib plutôt que celle de 64 bits dans/usr/local/pgsql/lib.Comment puis-je compiler des liaisons Postgres 64 bits pour Perl sous Solaris?

 
# /usr/local/bin/cpanp -i DBD::Pg 
Installing DBD::Pg (2.15.1) 
... 
ld: fatal: file /usr/lib/libpq.so: wrong ELF class: ELFCLASS32 

Ma première pensée a été de supprimer les Postgres empaquetés, mais je l'ai lu advice against that. Je suis sûr que tout fonctionnerait si je recommençais avec Perl 32 bits, mais je préférerais m'en tenir à ce que j'ai.

J'ai remarqué dans la sortie CPAN que le fichier makefile définit LD_RUN_PATH =/usr/lib avant la liaison. Cela semble être quelque chose qui devrait changer, mais je ne sais pas comment le changer (puisque tout est automatisé par CPAN), et je ne sais pas quels autres effets secondaires un tel changement pourrait avoir. Il semble que le répertoire correct,/usr/local/pgsql/lib, ne soit pas du tout sur le chemin, donc peut-être que le rendre visible résoudrait le problème même sans cacher la version 32 bits, mais je ne sais pas comment faire ça non plus.

Comment puis-je compiler ce module dans l'environnement dont je dispose, ou comment puis-je modifier mon environnement pour que le module compile tel quel?

Répondre

3

De http://cpansearch.perl.org/src/TURNSTEP/DBD-Pg-2.15.1/Makefile.PL

En bref:

Par défaut Makefile.PL utilise App :: Info pour trouver l'emplacement de la bibliothèque PostgreSQL et inclure des répertoires. Toutefois, si vous souhaitez le contrôler vous-même, définissez les variables d'environnement POSTGRES_INCLUDE et POSTGRES_LIB, ou définissez simplement POSTGRES_HOME. Notez que si vous avez compilé PostgreSQL avec le support SSL, vous devez définir la variable d'environnement POSTGRES_LIB et d'ajouter "-lssl" à elle, comme ceci:

export POSTGRES_LIB="/usr/local/pgsql/lib -lssl" 
+0

Réglage 'POSTGRES_HOME =/usr/local/pgsql 'a bien fonctionné. Pas besoin de supprimer Postgres 32 bits. Merci. –