web-dev-qa-db-fra.com

Découvrez si la bibliothèque est sur le chemin

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 faire si la bibliothèque n'est connue que via le paramètre LD_LIBRARY_PATH?

Dans ce cas, le programme peut trouver la bibliothèque, mais pas ldconfig. 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 chemins d'accès.

15
nbubis

ldconfig peut lister toutes les bibliothèques auxquelles il a accès. Ces bibliothèques sont également stockées dans son cache.

/sbin/ldconfig -v -N explorera tous les chemins de bibliothèque habituels, listera 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:

/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)
15
lgeorget

Substitue globalement (espace) à : avec LD_LIBRARY_PATH

/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)
2
fizwit

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:

echo "int main(){}" | gcc -x c++ -Wl,--no-as-needed -lmylib - && ldd a.out | grep mylib

-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é.

2
guini