«Quel» équivalent pour les bibliothèques partagées

9

Je recherche un utilitaire qui se comporterait de la même manière que which, mais pour rechercher des bibliothèques partagées (* .so) dans les répertoires définis dans $ LD_LIBRARY_PATH?

rahmu
la source

Réponses:

5

Si vous avez un exécutable et que vous voulez voir où il récupère les bibliothèques, exécutez

ldd /path/to/executable

Cela compte pour les bibliothèques sur le chemin de recherche par défaut, ainsi que des bibliothèques de cet exécutable de rpath le cas échéant.

Sous Linux, les chemins d'accès aux bibliothèques système sont mis en cache pour plus d'efficacité. /sbin/ldconfig -paffiche le contenu du cache (il est stocké dans /etc/ld.so.cache). Voici un script qui montre le ou les emplacements d'une bibliothèque:

#!/bin/sh
if [ -n "$LD_LIBRARY_PATH" ]; then
  set -f
  IFS=:
  for d in $LD_LIBRARY_PATH; do
    if [ -e "$d/$1" ]; then echo "$1"; fi
  done
fi
/sbin/ldconfig -p |
awk -v needle="$1" '$1 == needle {sub(/.* => /, ""); print}'
Gilles 'SO- arrête d'être méchant'
la source
5

Si vos bibliothèques sont correctement mises en cache, vous devriez pouvoir les trouver via:

ldconfig -p|grep "yourlibrary"

Si vous recherchez une bibliothèque fournie avec votre distribution, vous pouvez utiliser les moyens de distribution pour rechercher des fichiers dans des packages.

  • zypper wp "* / library.so" (SLES et OpenSuSE)
  • yum fournit "* / library.so" (RedHat et ses clones)

Cela produira également des rpms qui ne sont pas installés, mais qui font partie de vos sources d'installation actives.

Nils
la source
3

Si vous recherchez un utilitaire qui fonctionnera comme gccle -lLIBNAMEdrapeau de, qui recherche un fichier appelé, libLIBNAME.sovous pouvez probablement utiliser un petit script qui fait quelque chose comme ceci:

#!/bin/sh
ldpath="${LD_LIBRARY_PATH:-$(</etc/ld.so.conf)}"
notfound=1
for libdir in ${ldpath//:/ }; do
        (test -f "$libdir/lib${1}.so" && echo "$_") && notfound=0
done
[ "$notfound" -eq 0 ]
amphétamachine
la source
1
Merci pour le script mais je me demande vraiment s'il existe un utilitaire "standard" pour cela.
rahmu