¿Cómo verificar si hay una biblioteca instalada?

166

En Linux, ¿cómo verifico si una biblioteca está instalada o no? (desde la línea de comando, por supuesto).

En mi caso específico ahora, quiero verificar si libjpeg está instalado.

Hasen
fuente
¿Qué distribución estás usando?
radio

Respuestas:

210

Para hacer esto de una manera independiente de la distribución *, puede usar ldconfig con grep, de esta manera:

ldconfig -p | grep libjpeg

Si libjpeg no está instalado, no habrá salida. Si está instalado, obtendrá una línea para cada versión disponible.

Reemplace libjpeg por cualquier biblioteca que desee, y tiene una forma genérica, independiente de la distribución * de verificar la disponibilidad de la biblioteca.

Si por alguna razón la ruta a ldconfig no está establecida, puede intentar invocarla usando su ruta completa, por lo general /sbin/ldconfig.

** 99% de las veces *

falso
fuente
2
Esto debe ser aceptado como la respuesta. ¡Excelente!
1
No es posible usar esto para verificar la versión de desarrollo (encabezados) de una biblioteca, ¿verdad?
andig
2
¿Se puede especificar el 99% de las veces ? bash: ldconfig: command not founden Debian x64 Jessie con xfce! Esta es la versión recomendada de Debian en el sitio web de Debian ...
Tomáš Zato
44
@ TomášZato: ldconfigno está disponible ( command not foundaparece) si intenta ejecutarlo sin ser superusuario.
Gauthier
2
/sbin/ldconfig -pfunciona para mí sin necesidad de ser root.
Pedro Gimeno
34

Puede consultar con el administrador de paquetes de su distribución (aptitude, yum, ...) pero como no entregó su distribución, no puedo darle el comando correcto.

Otra forma puede ser ejecutar gcc -ljpeg, si obtiene 'ld: biblioteca no encontrada para -ljpeg' significa que gcc no ha encontrado la biblioteca (pero no significa que no esté instalada), si obtiene algo como 'Símbolos indefinidos : "_main", referenciado desde: ... 'significa que se ha encontrado libjpeg.

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* Hay alguna otra forma de averiguar si la lib está instalada en el sistema

Hay muchas otras formas de verificar que, si nos brinda más contexto (por qué necesita verificar si libjpeg está instalado), podríamos brindarle la mejor solución para su caso específico.

radio
fuente
¿Cómo encontrarlo usando aptitude?
BBK
17

Yo uso la utilidad whereis .

Muestra:

l1feh4ck3r@xxx:~$ whereis libjpeg
libjpeg: /usr/lib/libjpeg.so /usr/lib/libjpeg.a /usr/lib/libjpeg.la
levantador de pesas
fuente
11

Yo uso esto:

gcc -lpng

Cuando se instala la lib, produce:

undefined reference to 'main'

Cuando la lib no está instalada:

cannot find -lpng
AndreLDM
fuente
9

Para la distribución basada en deb puede hacer

dpkg -s packagename

O si solo conoce el nombre del archivo, use

locate filename

El nombre de archivo suele ser libsomething.so [.version].

Kim
fuente
1
El nombre de archivo también puede ser algo así como "libsomething.a" para la versión estática.
radio
Encuentro dpkg -slimitado en utilidad, porque quiere el nombre real del paquete, que puede diferir sutil o significativamente de la biblioteca misma. Yo usodpkg -s|grep LIBRARY
Drew Stephens
2
@dinomite apt-file es tu amigo :)
radio
4

En los sistemas basados ​​en Redhat, uno puede usar pkg-config para verificar si una biblioteca está instalada o no. Muchos binarios de rpm realmente hacen las mismas verificaciones antes de proceder con la instalación, por lo que podemos confiar razonablemente en su veracidad.

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
fuente
1

También puede intentar usar dpkg para verificar si está instalado.

dpkg --list | grep [some_key_words_of_your_lib]

Además, en CentOS, puedes probar esto.

rpm -qa [lib_name]

Scott Yang
fuente
Nota: Solo funcionará para distribuciones basadas en Debian
ALex_hha
@ALex_hha Sí, gracias, esto debe enfatizarse. En sistemas basados ​​en CentOS o red hat, use pkg-configen su lugar.
Scott Yang