Comment vérifier si une bibliothèque est installée?

166

Sous Linux, comment vérifier si une bibliothèque est installée ou non? (à partir de la ligne de commande bien sûr).

Dans mon cas spécifique, je veux vérifier si libjpeg est installé.

hasen
la source
Quelle distribution utilisez-vous?
rayon

Réponses:

210

Pour faire cela d'une manière indépendante de la distro *, vous pouvez utiliser ldconfig avec grep, comme ceci:

ldconfig -p | grep libjpeg

Si libjpeg n'est pas installé, il n'y aura pas de sortie. S'il est installé, vous aurez une ligne pour chaque version disponible.

Remplacez libjpeg par la bibliothèque de votre choix et vous disposez d'un moyen générique, indépendant de la distro *, de vérifier la disponibilité de la bibliothèque.

Si, pour une raison quelconque, le chemin d'accès à ldconfig n'est pas défini, vous pouvez généralement l'invoquer en utilisant son chemin d'accès complet /sbin/ldconfig.

** 99% du temps *

faux
la source
2
Cela devrait être accepté comme la réponse. Génial!
1
Ce n'est pas possible de l'utiliser pour vérifier la version dev (les en-têtes) d'une bibliothèque, n'est-ce pas?
andig
2
Pouvez-vous spécifier 99% des temps ? bash: ldconfig: command not foundsur Debian x64 Jessie avec xfce! Ceci est la version recommandée de Debian sur le site web debian ...
Tomáš Zato
4
@ TomášZato: ldconfign'est pas disponible ( command not founds'affiche) si vous essayez de l'exécuter sans être superutilisateur.
Gauthier
2
/sbin/ldconfig -ptravaille pour moi sans avoir besoin d'être root.
Pedro Gimeno
34

Vous pouvez vérifier avec le gestionnaire de paquets de votre distribution (aptitude, miam, ...) mais comme vous n'avez pas donné votre distribution, je ne peux pas vous donner la commande correcte.

Une autre façon peut être de courir gcc -ljpeg, si vous obtenez 'ld: bibliothèque introuvable pour -ljpeg', cela signifie que gcc n'a pas trouvé la bibliothèque (mais cela ne veut pas dire qu'elle n'est pas installée), si vous obtenez quelque chose comme 'Symboles non définis : "_main", référencé depuis: ... 'cela signifie que libjpeg a été trouvé.

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* existe-t-il un autre moyen de savoir si la bibliothèque est installée dans le système?

Il existe de nombreuses autres façons de vérifier cela. Si vous nous donnez plus de contexte (pourquoi vous devez vérifier si libjpeg est installé), nous pourrions vous donner la meilleure solution pour votre cas spécifique.

rayon
la source
Comment le trouver en utilisant aptitude?
BBK
17

J'utilise l' utilitaire whereis .

Échantillon:

l1feh4ck3r@xxx:~$ whereis libjpeg
libjpeg: /usr/lib/libjpeg.so /usr/lib/libjpeg.a /usr/lib/libjpeg.la
trépied
la source
11

J'utilise ceci:

gcc -lpng

Quand la lib est installée, cela donne:

undefined reference to 'main'

Quand la lib n'est pas installée:

cannot find -lpng
AndreLDM
la source
9

Pour la distribution basée sur deb, vous pouvez faire

dpkg -s packagename

Ou si vous ne connaissez que le nom du fichier, utilisez

locate filename

Le nom du fichier est habituellement libsomething.so [.version].

Kim
la source
1
Le nom de fichier peut aussi être quelque chose comme "libsomething.a" pour la version statique.
rayon
Je trouve l’ dpkg -sutilité limitée, car elle veut le nom du paquet lui-même, qui peut différer légèrement ou sensiblement de la bibliothèque elle-même. J'utilisedpkg -s|grep LIBRARY
Drew Stephens
2
@dinomite apt-file est votre ami :)
rayon
4

Sur les systèmes basés sur Redhat, on peut utiliser pkg-config pour vérifier si une bibliothèque est installée ou non. En réalité, de nombreux binaires rpm effectuent les mêmes vérifications avant de procéder à l'installation. Nous pouvons donc raisonnablement compter sur sa véracité.

pkg-config --cflags jpeg

pkg-config --libs jpeg

pkg-config --cflags "jpeg >= 1.0.0" # for version check
pkg-config  --modversion jpeg | awk -F. '{ printf "0x%02X%02X%02X\n",$1,$2,$3 }' #version check
Saasira
la source
1

Vous pouvez également essayer d'utiliser dpkg pour vérifier s'il est installé.

dpkg --list | grep [some_key_words_of_your_lib]

De plus, sur CentOS, vous pouvez essayer ceci.

rpm -qa [lib_name]

Scott Yang
la source
Note: Ne fonctionnera que pour les distributions basées sur Debian
ALex_hha
@ALex_hha Oui, merci, cela devrait être souligné. Sur les systèmes CentOS ou Red Hat, utilisez pkg-configplutôt.
Scott Yang