2010-10-27 10 views
2

J'ai des bibliothèques partagées/dynamiques installées dans un répertoire sandbox. Je construis quelques applications qui lient les bibliothèques. Je suis à la recherche de ce qui semble être une différence entre OSX et Linux à cet égard et je ne suis pas sûr de ce qu'est la (meilleure) solution. Sous OSX, l'emplacement de la bibliothèque elle-même est enregistré dans la bibliothèque, de sorte que si vos applications sont liées, l'exécutable sait où chercher la bibliothèque lors de l'exécution. Cela fonctionne comme prévu avec mon sandbox, car l'exécutable y recherche des chemins d'installation à l'échelle du système.Comment lier des bibliothèques partagées dans le répertoire local, OSX vs Linux

Sous Linux, je n'arrive pas à faire fonctionner ça. Apparemment, l'emplacement de la bibliothèque n'est pas présent dans la bibliothèque elle-même. Si je comprends bien, vous devez ajouter les dossiers qui contiennent des bibliothèques à /etc/ld.so.conf et régénérer le cache ld en lançant ldconfig.

Cela ne semble pas faire l'affaire pour moi parce que mes bibliothèques sont situées dans un répertoire personnel de l'utilisateur. Il semble que ldconfig n'aime pas ça, ce qui est logique.

Comment puis-je résoudre ce problème? Je ne veux pas retirer les bibliothèques de mon bac à sable.

Répondre

2

Sous Linux, exécutez votre programme avec la variable d'environnement LD_LIBRARY_PATH définie dans votre répertoire sandbox.

(Je me souviens avoir utilisé un drapeau -R d'inclure les chemins bibliothèque dans le fichier binaire, mais soit il a été retiré de gcc ou il était uniquement disponible sur les systèmes BSD.)

+0

Je pensais en quelque sorte LD_LIBRARY_PATH a été utilisé par ldconfig. Je ne savais pas que vous pouviez le changer de façon dynamique. Il fonctionne comme un charme. Merci! –

+0

J'ai voté cette réponse, mon erreur :-p –

+0

'-Wl, -rpath,/chemin/vers/sandbox' – Jed

1

Sur Linux vous devez définir LD_RUN_PATH à votre sandbox dir. Cela vaut mieux que de définir LD_LIBRARY_PATH car vous indiquez à l'éditeur de liens où se trouve la bibliothèque à l'heure de liaison, plutôt que de dire au chargeur de bibliothèque partagée à de s'exécuter.

Voir: http://xahlee.org/UnixResource_dir/_/ldpath.html

+0

De cette façon semble placer le RPATH dans un binaire, ce qui peut être bien pour les applications en bac à sable, mais en général fait impossible de déplacer une application. –

+0

Les applications en bac à sable sont ce qui est en question ici. Que voulez-vous dire par «déplacer une application autour»? La distribution binaire? LD_RUN_PATH ne va pas aider dans ce cas. –