jak sprawdzić, czy biblioteka jest zainstalowana?


167

Jak mogę sprawdzić w Linuksie, czy biblioteka jest zainstalowana, czy nie? (z linii poleceń oczywiście).

W moim konkretnym przypadku chcę teraz sprawdzić, czy libjpeg jest zainstalowany.


Jakiej dystrybucji używasz?
promień

Odpowiedzi:


210

Aby to zrobić w sposób niezależny od dystrybucji *, możesz użyć ldconfig z grep, w następujący sposób:

ldconfig -p | grep libjpeg

Jeśli libjpeg nie jest zainstalowany, nie będzie danych wyjściowych. Jeśli jest zainstalowany, otrzymasz linię dla każdej dostępnej wersji.

Zamień libjpeg na dowolną bibliotekę, a masz ogólny, niezależny od dystrybucji * sposób sprawdzania dostępności biblioteki.

Jeśli z jakiegoś powodu ścieżka do ldconfig nie jest ustawiona, zazwyczaj możesz spróbować ją wywołać, używając pełnej ścieżki /sbin/ldconfig.

** 99% razy *


2
Należy to zaakceptować jako odpowiedź. Wspaniały!

1
Nie można tego użyć do sprawdzenia wersji deweloperskiej (nagłówków) biblioteki, prawda?
andig

2
Czy możesz podać 99% razy ? bash: ldconfig: command not foundna Debian x64 Jessie z xfce! To jest zalecane wydanie debian na stronie debian ...
Tomáš Zato,

4
@ TomášZato: ldconfignie jest dostępne ( command not foundpokazuje się), jeśli spróbujesz uruchomić go bez superużytkownika.
Gauthier

2
/sbin/ldconfig -pdziała dla mnie bez konieczności rootowania.
Pedro Gimeno,

34

Możesz sprawdzić u menedżera pakietów swojej dystrybucji (aptitude, yum, ...), ale ponieważ nie podałeś swojej dystrybucji, nie mogę dać ci właściwej komendy.

Innym sposobem może być uruchomienie gcc -ljpeg, jeśli pojawi się „ld: biblioteka nie znaleziona dla -ljpeg”, oznacza to, że gcc nie znalazł biblioteki (ale to nie znaczy, że nie jest zainstalowana), jeśli pojawi się coś w rodzaju „Niezdefiniowane symbole : „_main”, do którego odwołuje się: ... ”oznacza, że ​​znaleziono libjpeg.

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* są innym sposobem na sprawdzenie, czy lib jest zainstalowany w systemie

Istnieje wiele innych sposobów, aby to sprawdzić, jeśli dasz nam większy kontekst (dlaczego musisz sprawdzić, czy libjpeg jest zainstalowany), możemy dać ci najlepsze rozwiązanie dla twojej konkretnej sprawy.


Jak go znaleźć za pomocą aptitude?
BBK

17

Korzystam z narzędzia whereis .

Próba:

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

11

Używam tego:

gcc -lpng

Po zainstalowaniu biblioteki lib:

undefined reference to 'main'

Gdy biblioteka nie jest zainstalowana:

cannot find -lpng

9

W przypadku dystrybucji opartej na debie możesz to zrobić

dpkg -s packagename

Lub jeśli znasz tylko nazwę pliku, użyj

locate filename

Nazwa pliku to zwykle libsomething.so [.version].


1
Nazwa pliku może być również taka jak „libsomething.a” dla wersji statycznej.
promień

Uważam, że dpkg -sużyteczność jest ograniczona, ponieważ chce ona rzeczywistej nazwy pakietu, która może nieznacznie różnić się znacznie od samej biblioteki. Używamdpkg -s|grep LIBRARY
Drew Stephens

2
@dinomite apt-file jest twoim przyjacielem :)
promień

4

W systemach opartych na Redhat można użyć pkg-config, aby sprawdzić, czy biblioteka jest zainstalowana, czy nie. Wiele plików binarnych rpm faktycznie wykonuje te same kontrole przed kontynuowaniem instalacji, więc możemy rozsądnie polegać na ich prawdziwości.

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

Możesz także spróbować użyć dpkg, aby sprawdzić, czy jest zainstalowany.

dpkg --list | grep [some_key_words_of_your_lib]

Poza tym w CentOS możesz tego spróbować.

rpm -qa [lib_name]


Uwaga:
Działa

@ALex_hha Tak, dziękuję, należy to podkreślić. W systemach opartych na CentOS lub Red Hat użyj pkg-configzamiast tego.
Scott Yang
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.