1 votes

Installation de plusieurs versions d'une bibliothèque partagée

Je suis sous ubuntu 10.04 et je veux utiliser tmux 1.6. tmux a une dépendance sur libevent 2.

Ma solution a été de compiler libevent2 et de la déposer dans /usr/local/lib puis compilez tmux contre cette librairie et déposez dans /usr/local/bin . Cela fonctionne très bien jusqu'à ce que... je redémarre. Ce n'est qu'une supposition de ma part, mais il semble que d'autres binaires se lient maintenant à la bibliothèque libevent2, probablement parce qu'elle se trouve dans le chemin de la bibliothèque. Comme il y a plus de 60 paquets avec des dépendances de libevent1, cela fait perdre la tête à mon installation.

Existe-t-il une manière idiomatique d'aborder l'exécution d'une application dont la bibliothèque principale dépend d'une version différente ? Devrais-je simplement lier statiquement la bibliothèque ?

0voto

RedGrittyBrick Points 78148

http://www.ibm.com/developerworks/linux/library/l-lpic1-v3-102-3/ suggère

Chargement de bibliothèques spécifiques

Si vous utilisez une ancienne application qui qui a besoin d'une ancienne version spécifique d'une bibliothèque partagée, ou si vous une nouvelle bibliothèque partagée ou une nouvelle version d'une bibliothèque pourriez vouloir remplacer les chemins de recherche par défaut utilisés par le chargeur. Cela peut également être nécessaire pour les scripts qui utilisent des bibliothèques partagées spécifiques au produit qui peuvent être installées dans le répertoire /strkeep>. produit qui peuvent être installées dans l'arbre /opt. Tout comme vous pouvez définir la variable PATH pour spécifier un chemin de recherche pour les exécutables, vous pouvez vous pouvez définir la variable LD_LIBRARY_PATH sur une liste séparée par deux points de séparée par des deux points, dans laquelle il faut rechercher les bibliothèques avant celles du système spécifiées dans ld.so.cache. Par exemple, vous pouvez utiliser une commande comme :

export LD_LIBRARY_PATH=/usr/lib/oldstuff:/opt/IBM/AgentController/lib

L'article en lien illustre comment utiliser ldd pour trouver les bibliothèques dont dépend un programme.

0voto

Casper Points 1935

Les programmes binaires compilés sont généralement liés à /usr/lib/libXXX.so.1.2.3

Si vous utilisez une nouvelle version spécifique, vous pouvez l'ajouter à la liste. /usr/lib/libXXX.so.3.4.5 et votre programme nouvellement créé devrait être lié à celui-ci.

Vous pouvez vérifier si les anciens programmes se lient maintenant avec la nouvelle librairie par ldd /path/to/program .

Si ça arrive vraiment, tu peux :

  • mettre la nouvelle librairie dans un répertoire séparé /special/path/lib und
  • lancer votre programme spécial avec un wrapper Shell Shell, qui définit LD_LIBRARY_PATH=/special/path/lib:$LD_LIBRARY_PATH et lance ensuite le programme binaire ou
  • si vous compilez votre programme vous-même, vous pouvez passer la balise LDFLAGS=-Wl,-rpath,/special/path/lib , cela code en dur le chemin de recherche de la librairie spéciale dans votre programme (agréable car fonctionne sans le wrapper script)

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