En supposant que je veux tester si une bibliothèque est installée et utilisable par un programme. Je peux utiliser ldconfig -p | grep mylib
pour savoir s'il est installé sur le système. mais que se passe-t-il si la bibliothèque n'est connue que via le paramètre LD_LIBRARY_PATH
?
Dans ce cas, le programme pourra peut-être trouver la bibliothèque, mais ldconfig
ne le fera pas. Comment puis-je vérifier si la bibliothèque se trouve dans le chemin de l'éditeur de liens combiné ?
J'ajouterai que je recherche une solution qui fonctionnera même si je n'ai pas réellement le programme à portée de main (par exemple le programme n'est pas encore compilé), je veux juste savoir qu'une certaine bibliothèque existe dans ld
' s chemins.
linux
dynamic-linking
ld
nbubis
la source
la source
ldd <binary>
pour vérifier si toutes les bibliothèques liées se trouvent dans le chemin. Il y a peut-être une façon plus élégante.ldd
sert exactement ce but.LIBRARY_PATH
une variable d'environnement qui est recherchée par exemple par legcc
compilateur. LaLIBRARY_PATH
variable d'environnement possède également une liste de répertoires séparés par deux points.Réponses:
ldconfig
peut répertorier toutes les bibliothèques auxquelles il a accès. Ces bibliothèques sont également stockées dans son cache./sbin/ldconfig -v -N
va explorer tous les chemins de bibliothèque habituels, répertorier toutes les bibliothèques disponibles, sans reconstruire le cache (ce qui n'est pas possible si vous n'êtes pas un utilisateur root). Il ne prend PAS en compte les bibliothèques dans LD_LIBRARY_PATH (contrairement à ce que ce message a dit avant de modifier), mais vous pouvez passer des bibliothèques supplémentaires à la ligne de commande en utilisant la ligne ci-dessous:la source
ldconfig
n'est pas portable car il ne s'applique qu'aux implémentations basées sur l'a.out
éditeur de liens dynamique basé sur SunOS-4.0 de 1987./sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH)
pas trop d'une exagération à mon goût.ldconfig
dans un accord avec AT&T car la mise en cache de l'éditeur de liens était trop sensible aux erreurs. Sun a ajouté plus tardthe tree stooges
:moe
,lari
etcrle
que les programmes d'aide pour la gestion ELF.Substitut
:
global (espace) pour avec LD_LIBRARY_PATHla source
Vous pouvez compiler un programme de test simple avec gcc et lier votre bibliothèque. Ensuite, vous pouvez vérifier les bibliothèques utilisées avec ldd. J'utilise quelque chose comme ça:
-Wl,--no-as-needed
empêche l'éditeur de liens de supprimer la bibliothèque, car aucun symbole de la bibliothèque n'est utilisé.la source