як перевірити, чи встановлена ​​бібліотека?


167

Як перевірити, встановлена ​​чи ні бібліотека в Linux? (з командного рядка звичайно).

У моєму конкретному випадку я зараз хочу перевірити, чи встановлено libjpeg.


Який дистрибутив ви використовуєте?
радіус

Відповіді:


210

Для цього в режимі, незалежному від дистрибуції * ви можете використовувати ldconfig з grep, як це:

ldconfig -p | grep libjpeg

Якщо libjpeg не встановлений, виходу не буде. Якщо він встановлений, ви отримаєте рядок для кожної наявної версії.

Замініть libjpeg будь-якою бібліотекою, яку ви хочете, і у вас є загальний, незалежний від dist * спосіб перевірки наявності бібліотеки.

Якщо з якихось причин шлях до ldconfig не встановлений, зазвичай можна спробувати викликати його, використовуючи, як правило, його повний шлях /sbin/ldconfig.

** у 99% разів *


2
Це слід сприймати як відповідь. Чудово!

1
Неможливо використати це для перевірки на версію розробника (заголовки) бібліотеки, правда?
andig

2
Чи можете ви вказати 99% разів ? bash: ldconfig: command not foundна Debian x64 Джессі з xfce! Це рекомендований реліз debian на веб-сайті debian ...
Tomáš Zato

4
@ TomášZato: ldconfigнедоступний ( command not foundз'являється), якщо ви спробуєте запустити його, не будучи суперпользователем.
Готьє

2
/sbin/ldconfig -pпрацює для мене, не потребуючи root.
Педро Гімено

34

Ви можете проконсультуватися з диспетчером пакунків вашого розповсюдження (здатність, ням, ...), але, як ви не дали розподілу, я не можу дати вам правильну команду.

Інший спосіб може бути запущений gcc -ljpeg, якщо ви отримаєте 'ld: library not found for -ljpeg', це означає, що gcc не знайшов бібліотеку (але це не означає, що вона не встановлена), якщо ви отримаєте щось на кшталт 'Не визначені символи : "_main", на яку посилається: ... "це означає, що libjpeg знайдено.

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* є ще якийсь спосіб дізнатися, чи встановлена ​​в системі lib

Існує багато інших способів перевірити, що якщо ви дасте нам більше контексту (чому вам потрібно перевірити, чи встановлено libjpeg), ми могли б дати вам найкраще рішення для вашого конкретного випадку.


Як знайти це за допомогою здатності?
BBK

17

Я використовую утиліту thatis .

Зразок:

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

11

Я використовую це:

gcc -lpng

Коли вкладка встановлена, вона дає:

undefined reference to 'main'

Коли вкладка не встановлена:

cannot find -lpng

9

Для розподілу на основі деб можна зробити

dpkg -s packagename

Або якщо ви знаєте лише ім'я файлу, використовуйте

locate filename

Ім’я файлу зазвичай libsomething.so [.version].


1
Ім'я файлу також може бути чимось на зразок "libsomething.a" для статичної версії.
радіус

Я вважаю dpkg -sобмеженою корисність, тому що вона бажає фактичної назви пакета, яка може суттєво або значно відрізнятися від самої бібліотеки. Я використовуюdpkg -s|grep LIBRARY
Дрю Стівенс

2
@dinomite apt-file є вашим другом :)
радіус

4

У системах на базі Redhat можна використовувати pkg-config, щоб перевірити, встановлена ​​чи ні бібліотека. Багато бінарних файлів об / хв насправді роблять однакові перевірки перед тим, як приступити до встановлення, тому ми можемо розумно покладатися на його правдивість.

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

Ви також можете спробувати використовувати dpkg, щоб перевірити, чи встановлений він.

dpkg --list | grep [some_key_words_of_your_lib]

Крім того, на CentOS ви можете спробувати це.

rpm -qa [lib_name]


Примітка: працюватиме лише для дистрибутивів на основі Debian
ALex_hha

@ALex_hha Так, дякую, це слід наголосити. Для систем на базі CentOS або червоного капелюха використовуйте pkg-configзамість цього.
Скотт Ян
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.