4 votes

Erreur du pilote PSQL 64bit

Je dispose d'un serveur Ubuntu 12.04 64bit configuré sous Hyper-V. J'ai installé les pilotes SQL 64bit de Pervasive afin qu'un script de mise à jour des stocks puisse être exécuté quotidiennement (mise à jour de la base de données MySQL externe à partir d'un autre serveur local exécutant le logiciel Exchequer / base de données PSQL).

Ces pilotes semblent entrer en conflit, comme je l'ai découvert en essayant d'exécuter des commandes apt-get :

apt-get update
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by apt-get)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by apt-get)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by apt-get)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/x86_64-linux-gnu/libapt-pkg.so.4.12)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /usr/lib/x86_64-linux-gnu/libapt-pkg.so.4.12)
apt-get: /usr/local/psql/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/lib/x86_64-linux-gnu/libapt-pkg.so.4.12)

Toute aide serait la bienvenue.

5voto

Bunny Joel Points 43

Il semble que vous ou l'installateur ayez ajouté /usr/local/pgsql/lib64/ à /etc/ld.so.conf ou à la LD_LIBRARY_PATH variable d'environnement. Si elle se trouve dans ld.so.conf Retirez-le et exécutez ldconfig . Idem s'il s'agit de l'option par défaut. LD_LIBRARY_PATH - contrôle /etc/environment les scripts de démarrage de l'ensemble du système, vos .bashrc y .bash_profile etc. pour voir où il a pu être ajouté.

C'est une mauvaise idée d'avoir une incompatible libstdc++ dans le chemin de recherche de la bibliothèque. Si l'installateur de Pervasive a fait cela, signalez un bogue, c'est totalement inacceptable et (comme vous l'avez découvert) peut casser votre système.

Une fois qu'il n'est plus dans le chemin de recherche de votre bibliothèque, tout le reste recommencera à fonctionner, mais les pilotes ne fonctionneront pas. Vous pourrez peut-être les faire fonctionner en exécutant le programme qui les utilise avec un script enveloppant qui définit les paramètres suivants LD_LIBRARY_PATH="/usr/local/pgsql/lib64/:${LD_LIBRARY_PATH}" mais seulement si ces programmes eux-mêmes ne nécessitent pas l'autre libstdc++ .


Un wrapper script peut être aussi simple que :

#!/bin/sh
set -e
LD_LIBRARY_PATH="/usr/local/pgsql/lib64/:${LD_LIBRARY_PATH}"
/path/to/my/program "$@"

"$@" est une variable "magique" qui se développe dans les arguments originaux passés au Shell Shell. Sauvegardez le Shell comme, disons, myprogram_wrapper.sh , modifier /path/to/my/program pour pointer vers l'emplacement de l'exécutable de l'application que vous voulez lancer, et utilisez chmod a+x my_program_wrapper.sh pour le rendre exécutable. Vous pouvez ensuite lancer l'application avec ./my_program_wrapper.sh ou ajouter cette enveloppe aux raccourcis du bureau, etc. à la place de l'application originale.

C'est ainsi que de nombreux logiciels fournis sous forme de binaires, comme Adobe Reader, se lancent avec leurs bibliothèques sans affecter le reste du système. Ce n'est pas la meilleure façon (c'est d'utiliser la fonction rpath de liaison) mais c'est bon.

0 votes

Merci craig - j'ai trouvé une solution qui fonctionne pour moi (voir ma réponse) mais la vôtre est plus correcte (c'est pourquoi je l'ai acceptée) car elle conduit à un système qui fonctionne correctement plutôt qu'à un hack juste pour faire fonctionner PSQL/APT. La librairie PSQL a été ajoutée par moi après avoir suivi un guide ici : cs.pervasive.com/forums/p/14171/48829.aspx . Je n'en sais pas assez pour mettre en place ce wrapper script.

0 votes

@AlexHolsgrove Ajout d'une note rapide sur un simple wrapper script. s'il vous plaît commenter le fil de discussion de ce forum et diriger les gens ici, vous devriez no soit globalement modificatrice ld.so.conf comme ça !

3voto

Quelqu'un sur les forums de Pervasive a suggéré cette correction :

En raison de certains conflits de versions, j'ai dû déplacer certains fichiers pour pouvoir pour pouvoir exécuter "apt-get" sans se plaindre des versions.

sudo mv /usr/local/psql/lib/libgcc_s.so.1 /usr/local/psql/lib/libgcc_s.so.1.org

sudo mv /usr/local/psql/lib/libstdc++.so.6 /usr/local/psql/lib/libstdc++.so.6.org

et après cela ne pas exécuter "sudo ldconfig"

Cela fonctionne, mais après avoir lu la réponse de @CraigRinger, je pense que cela ressemble un peu à un hack. Malheureusement, je n'en sais pas assez pour pouvoir mettre en œuvre la fonction LD_LIBRARY_PATH fixer.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X