Wie überprüfe ich, ob eine Bibliothek installiert ist?

167

Wie überprüfe ich unter Linux, ob eine Bibliothek installiert ist oder nicht? (Von der Kommandozeile natürlich).

In meinem speziellen Fall möchte ich jetzt überprüfen, ob libjpeg installiert ist.

hasen
quelle
Welche Distribution benutzt du?
Radius

Antworten:

210

Um dies auf eine distro-unabhängige * Art und Weise zu tun, können Sie ldconfig mit grep wie folgt verwenden:

ldconfig -p | grep libjpeg

Wenn libjpeg nicht installiert ist, erfolgt keine Ausgabe. Wenn es installiert ist, erhalten Sie eine Zeile für jede verfügbare Version.

Ersetzen Sie libjpeg durch eine beliebige Bibliothek, und Sie haben eine allgemeine, von der Distribution unabhängige * Möglichkeit, die Verfügbarkeit der Bibliothek zu überprüfen.

Wenn der Pfad zu ldconfig aus irgendeinem Grund nicht festgelegt ist, können Sie versuchen, ihn normalerweise mit dem vollständigen Pfad aufzurufen /sbin/ldconfig.

** 99% der Zeiten *

gefälscht
quelle
2
Dies sollte als Antwort akzeptiert werden. Toll!
1
Es ist nicht möglich, damit nach der Dev-Version (Headern) einer Bibliothek zu suchen, oder?
Andig
2
Können Sie 99% mal angeben ? bash: ldconfig: command not foundauf Debian x64 Jessie mit xfce! Dies ist die empfohlene Debian-Veröffentlichung auf der Debian-Website ...
Tomáš Zato,
4
@ TomášZato: ldconfigist nicht verfügbar (wird angezeigt command not found), wenn Sie versuchen, es auszuführen, ohne Superuser zu sein.
Gauthier
2
/sbin/ldconfig -pfunktioniert bei mir ohne root sein zu müssen.
Pedro Gimeno
34

Sie können beim Paketmanager Ihrer Distribution nachfragen (aptitude, yum, ...), aber da Sie Ihre Distribution nicht angegeben haben, kann ich Ihnen nicht den richtigen Befehl geben.

Eine andere Möglichkeit ist gcc -ljpeg, 'ld: library not found for -ljpeg' auszuführen. Dies bedeutet, dass gcc die Bibliothek nicht gefunden hat (dies bedeutet jedoch nicht, dass sie nicht installiert ist), wenn Sie so etwas wie 'Undefinierte Symbole' erhalten : "_main", referenziert von: ... 'bedeutet, dass libjpeg gefunden wurde.

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* sind eine andere Möglichkeit, um festzustellen, ob die lib im System installiert ist

Es gibt viele andere Möglichkeiten, dies zu überprüfen. Wenn Sie uns mehr Kontext angeben (warum müssen Sie überprüfen, ob libjpeg installiert ist), können wir Ihnen die beste Lösung für Ihren speziellen Fall anbieten.

Radius
quelle
Wie finde ich es mit aptitude?
BBK
17

Ich benutze das Dienstprogramm whereis .

Stichprobe:

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

Ich benutze das:

gcc -lpng

Wenn die lib installiert ist, ergibt sich:

undefined reference to 'main'

Wenn die lib nicht installiert ist:

cannot find -lpng
AndreLDM
quelle
9

Für deb-basierte Distribution können Sie dies tun

dpkg -s packagename

Oder wenn Sie nur den Dateinamen kennen, verwenden Sie

locate filename

Der Dateiname lautet normalerweise libsomething.so [.version].

Kim
quelle
1
Der Dateiname kann auch so etwas wie "libsomething.a" für die statische Version sein.
Radius
Ich finde dpkg -sin der Nützlichkeit eingeschränkt, weil es den tatsächlichen Paketnamen will, der sich subtil oder signifikant von der Bibliothek selbst unterscheiden kann. Ich benutzedpkg -s|grep LIBRARY
Drew Stephens
2
@ Dinomite Apt-Datei ist dein Freund :)
Radius
4

Auf Redhat-basierten Systemen kann mit pkg-config überprüft werden, ob eine Bibliothek installiert ist oder nicht. Viele rpm-Binärdateien führen die gleichen Überprüfungen durch, bevor Sie mit der Installation fortfahren, sodass wir uns vernünftigerweise auf deren Richtigkeit verlassen können.

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

Sie können auch versuchen, mit dpkg zu überprüfen, ob es installiert ist.

dpkg --list | grep [some_key_words_of_your_lib]

Außerdem können Sie dies unter CentOS ausprobieren.

rpm -qa [lib_name]

Scott Yang
quelle
Hinweis: Funktioniert nur für Debian-basierte Distributionen
ALex_hha
@ALex_hha Ja, danke, das sollte hervorgehoben werden. Verwenden Sie pkg-configstattdessen CentOS oder Red Hat-basierte Systeme .
Scott Yang