как проверить, установлена ​​ли библиотека?


166

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

В моем конкретном случае сейчас я хочу проверить, установлен ли libjpeg.


Какой дистрибутив вы используете?
радиус

Ответы:


210

Чтобы сделать это независимо от дистрибутива *, вы можете использовать ldconfig с grep, например:

ldconfig -p | grep libjpeg

Если libjpeg не установлен, вывод не будет. Если он установлен, вы получите строку для каждой доступной версии.

Замените libjpeg на любую нужную вам библиотеку, и у вас есть общий, независимый от дистрибутива способ проверки доступности библиотеки.

Если по какой-то причине путь к ldconfig не задан, обычно вы можете попытаться вызвать его, используя полный путь /sbin/ldconfig.

** 99% случаев *


2
Это должно быть принято как ответ. Большой!

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

2
Можете ли вы указать 99% раз ? bash: ldconfig: command not foundна Debian x64 Джесси с xfce! Это рекомендуемый релиз Debian на сайте Debian ...
Томаш Зато

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

2
/sbin/ldconfig -pработает для меня без необходимости быть root.
Педро Гимено

34

Вы можете проверить это с менеджером пакетов вашего дистрибутива (aptitude, yum, ...), но так как вы не дали свой дистрибутив, я не могу дать вам правильную команду.

Другим способом может быть запуск gcc -ljpeg, если вы получаете 'ld: library not found for -ljpeg', это означает, что gcc не нашел библиотеку (но это не значит, что она не установлена), если вы получаете что-то вроде 'Undefined символов : "_main", ссылка из: ... 'это означает, что libjpeg был найден.

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* какой-то другой способ узнать, установлена ​​ли библиотека в системе

Есть много других способов проверить, что, если вы дадите нам больше контекста (зачем вам нужно проверять, установлен ли libjpeg), мы могли бы дать вам лучшее решение для вашего конкретного случая.


Как найти это используя aptitude?
BBK

17

Я использую утилиту whereis .

Образец:

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

Для распространения на основе deb вы можете сделать

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, чтобы проверить, установлена ​​библиотека или нет. Многие двоичные файлы rpm на самом деле выполняют те же проверки перед продолжением установки, поэтому мы можем разумно полагаться на их достоверность.

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

2

Это делается инструментами настройки на Linux все время.

Посмотрите этот урок об autoconf и KDevelop .

Другие трюки будут использовать такие команды, как ldconfigи dpkg.


1

Вы также можете попробовать использовать dpkg, чтобы проверить, установлен ли он.

dpkg --list | grep [some_key_words_of_your_lib]

Кроме того, на CentOS вы можете попробовать это.

rpm -qa [lib_name]


Примечание: будет работать только для дистрибутивов на основе Debian
ALex_hha

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