¿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.


¿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 *


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.


¿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

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

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].


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


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]


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.