2008-11-04 3 views
2

Je travaille sur une machine Fedora Linux.Question Unix: Reconnaissance automatique du chemin pour les bibliothèques installées en local

J'ai un ensemble de binaires et de bibliothèques que j'ai installés localement sous mon répertoire personnel.

Je voudrais configurer mon système de sorte que l'installation du logiciel fonctionne de la même manière (pour moi) que si l'utilisateur root l'avait installé sans préfixe. Je peux très bien exécuter les binaires installés dans ~/local/bin en ajoutant ce répertoire à ma variable PATH, mais qu'en est-il des liens vers les bibliothèques dans ~/local/lib et ~/local/lib64?

Y a-t-il quelque chose de semblable à la variable LD_LIBRARY_PATH mais pour trouver la bibliothèque à la compilation plutôt qu'à l'exécution? Je ne veux pas m'inquiéter de passer explicitement le chemin vers le compilateur via L ~/local/lib ou via les drapeaux dans le script ./configure.

Répondre

1

Définissez la variable d'environnement LIBRARY_PATH sur $HOME/local/lib:$HOME/local/lib64. Vous pouvez également définir les variables d'environnement C_INCLUDE_PATH et CPLUS_INCLUDE_PATH pour trouver les fichiers d'inclusion dans $HOME/local/include. Ce sont des variables d'environnement utilisées par GCC pour trouver des bibliothèques et inclure des fichiers, donc elles ne fonctionneront probablement pas avec d'autres compilateurs.

+0

Voulez-vous dire LD_LIBRARY_PATH? –

+0

No. LD_LIBRARY_PATH est pour le chargement des bibliothèques; LIBRARY_PATH est utilisé par GCC pour les trouver. – mipadi

+0

Oh merci, c'est totalement la meilleure réponse, $ LIBRARY_PATH est ce dont j'avais besoin pour obtenir ld pour trouver les bibliothèques. Merci! – Gabe

0

Outre la définition de LD_LIBRARY_PATH, vous pouvez également consulter /etc/ld.so.conf (qui fonctionne pour tous les utilisateurs, même root). Tenez également compte de la sécurité de votre système si vous utilisez /etc/ld.so.conf; Si les utilisateurs exécutent la bibliothèque à partir de votre répertoire, ils vous font confiance pour ne pas jouer avec eux.

1

Il y a deux façons d'obtenir les bibliothèques de travailler à l'exécution:

  1. Si les bibliothèques ne sont que pour votre usage, et ce n'est pas un système multi-utilisateurs, puis utiliser la variable d'environnement $LD_LIBRARY_PATH

  2. Si vous êtes le seul utilisateur du système, vous pouvez ajouter vos répertoires dans /etc/ld.so.conf ou dans un nouveau fichier texte dans /etc/ld.so.conf.d. Exécutez ensuite ldconfig pour reconstruire la bibliothèque partagée du système de cache

choses de temps de compilation ne sont pas si claires. L'éditeur de liens GNU prend en charge le paramètre -rpath et la variable d'environnement $LD_RUN_PATH pour spécifier les chemins de bibliothèque. Cependant, dans chaque cas, le chemin du résultat est codé en dur dans le fichier binaire, donc si vous voulez déplacer vos fichiers ultérieurement, vous devrez les recompiler. Je crois que les programmes construits en utilisant des scripts de style ./configure devraient être capables de trouver toutes les bibliothèques qui se trouvent dans votre $LD_RUN_PATH, mais n'ont pas pu tester cela.

Dans tous les cas, l'exécution de ./configure --prefix=${HOME}/local doit permettre à configure de résoudre à la fois les répertoires d'inclusion et les bibliothèques.

Questions connexes