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.