come verificare se è installata una libreria?


167

In Linux, come posso verificare se una libreria è installata o no? (dalla riga di comando ovviamente).

Nel mio caso specifico ora, voglio verificare se libjpeg è installato.


Quale distribuzione stai usando?
raggio

Risposte:


211

Per fare ciò in modo indipendente dalla distro * puoi usare ldconfig con grep, in questo modo:

ldconfig -p | grep libjpeg

Se libjpeg non è installato, non ci sarà output. Se è installato, otterrai una riga per ogni versione disponibile.

Sostituisci libjpeg con qualsiasi libreria tu voglia e hai un modo generico, indipendente dalla distribuzione * di verificare la disponibilità della biblioteca.

Se per qualche motivo il percorso per ldconfig non è impostato, puoi provare a invocarlo usando il suo percorso completo, di solito /sbin/ldconfig.

** 99% delle volte *


2
Questo dovrebbe essere accettato come risposta. Grande!

1
Non è possibile usarlo per verificare la versione dev (header) di una libreria, giusto?
Andig

2
Puoi specificare il 99% delle volte ? bash: ldconfig: command not foundsu Debian x64 Jessie con xfce! Questa è la versione debian consigliata sul sito web debian ...
Tomáš Zato,

4
@ TomášZato: ldconfignon è disponibile (si command not foundpresenta) se si tenta di eseguirlo senza essere un superutente.
Gauthier,

2
/sbin/ldconfig -pfunziona per me senza bisogno di essere root.
Pedro Gimeno,

34

Puoi verificare con il gestore dei pacchetti della tua distribuzione (aptitude, yum, ...) ma poiché non hai dato la tua distribuzione, non posso darti il ​​comando giusto.

Un altro modo può essere quello di eseguire gcc -ljpeg, se ottieni 'ld: libreria non trovata per -ljpeg' significa che gcc non ha trovato la libreria (ma non significa che non sia installata), se ottieni qualcosa come 'Simboli indefiniti : "_main", referenziato da: ... 'significa che libjpeg è stato trovato.

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* sono un altro modo per scoprire se la lib è installata nel sistema

Esistono molti altri modi per verificare che, se ci dai più contesto (perché è necessario verificare se libjpeg è installato), possiamo darti la soluzione migliore per il tuo caso specifico.


Come trovarlo usando aptitude?
BBK,

17

Uso l' utility whereis .

Campione:

l1feh4ck3r@xxx:~$ whereis libjpeg
libjpeg: /usr/lib/libjpeg.so /usr/lib/libjpeg.a /usr/lib/libjpeg.la

11

Io lo uso questo:

gcc -lpng

Quando la lib è installata, produce:

undefined reference to 'main'

Quando la lib non è installata:

cannot find -lpng

9

Per la distribuzione basata su deb puoi farlo

dpkg -s packagename

O se conosci solo il nome del file, usa

locate filename

Il nome del file è in genere libsomething.so [.version].


1
Il nome file può anche essere simile a "libsomething.a" per la versione statica.
raggio

Trovo dpkg -slimitata l'utilità, perché vuole il nome del pacchetto effettivo, che può differire sottilmente o significativamente dalla libreria stessa. Io usodpkg -s|grep LIBRARY
Drew Stephens il

2
@dinomite apt-file è tuo amico :)
raggio

4

Sui sistemi basati su Redhat, è possibile utilizzare pkg-config per verificare se una libreria è installata o meno. Molti binari rpm eseguono effettivamente gli stessi controlli prima di procedere con l'installazione, quindi possiamo ragionevolmente fare affidamento sulla sua veridicità.

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


1

Puoi anche provare a usare dpkg per verificare se è installato.

dpkg --list | grep [some_key_words_of_your_lib]

Inoltre, su CentOS, puoi provare questo.

rpm -qa [lib_name]


Nota: funzionerà solo per le distribuzioni basate su Debian
ALex_hha,

@ALex_hha Sì, grazie, questo dovrebbe essere sottolineato. Sui sistemi basati su CentOS o Red Hat, utilizzare pkg-configinvece.
Scott Yang,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.