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.

hasen
źródło
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 *

fałszywy
źródło
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.

promień
źródło
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
ratownik
źródło
11

Używam tego:

gcc -lpng

Po zainstalowaniu biblioteki lib:

undefined reference to 'main'

Gdy biblioteka nie jest zainstalowana:

cannot find -lpng
AndreLDM
źródło
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].

Kim
źródło
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
Saasira
źródło
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]

Scott Yang
źródło
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