Определить имя статической / динамической библиотеки

Довольно часто я использую сторонние фрагменты кода C, которые используют библиотеку Unix / Linux C, пример #include <glib.h> , #include <net/if.h> . И они требуют, чтобы я знал имя конкретного файла библиотеки или имя pkg-config, пример -lglib-2.0 , -lbluetooth , pkg-config --libs dbus-1 . Примечание. Многие из них отличаются от файла заголовка, имеющего «2.0», «1», поэтому вы просто не можете догадаться об этом.

Как я могу узнать точное имя файла библиотеки, имеющегося в API / библиотеке? Используя мои примеры выше; как я могу найти, что файл библиотеки #include <glib.h> называется -lglib-2.0 ? Довольно сложно, что онлайн-ссылки для Glib / dbus / все они не просто говорят, что «имя файла библиотеки glib-2.0».

Есть ли какие-либо команды терминала, которые я могу использовать, чтобы это выяснить? Есть ли утилит, которые я могу использовать, чтобы это выяснить? Ссылки на API / библиотеки в Интернете действительно плохо для того, чтобы найти это.

Если я хочу найти, где находится hci.h я могу легко просто locate hci.h и найти его местоположение. Есть ли что-то вроде команды терминала для определения имени библиотеки?

  • Как выбрать время чтения и записи?
  • Рекомендации по книге Mono
  • Использование вызова функции системы для выполнения команды оболочки
  • C ++ компилируется в Arch Linux без пакета g ++ в репозиториях
  • файлы заголовков списка, используемые проектом, скомпилированным с gcc, вместе с иерархией
  • / usr / ucb / cc: языковой пакет дополнительного программного обеспечения не установлен
  • Как удалить BOOST 1.49 и установить BOOST 1.54 в ubuntu?
  • Перенаправление вывода при выполнении «bash -c ...» из программы C
  • One Solution collect form web for “Определить имя статической / динамической библиотеки”

    Нет общего способа узнать, какая библиотека должна использовать определенную функцию. Вам нужно посмотреть документацию этой библиотеки. Хорошо написанный учебник или ссылка на API должны сказать вам, что это его работа.

    Вы можете по крайней мере получить представление о том, какой пакет библиотеки требуется: это тот же пакет библиотеки, который содержит файл заголовка. Как определить, какой пакет содержит файл заголовка, зависит от дистрибутива, например, dpkg -S /usr/include/glib-2.0/glib.h на Debian / Ubuntu / Mint / …, rpm -qf /usr/include/glib-2.0/glib.h на RHEL / CentOS / Fedora / … и т. Д. После того, как вы знаете пакет библиотеки, перечислите его содержимое, чтобы найти файлы .so которые он содержит, например

     dpkg -L libglib2.0-dev | grep '\.so$' rpm -qlf /usr/include/glib-2.0/glib.h | grep '\.so$' 

    С Glib существует несколько файлов .so , и нет автоматического способа определить, какие из них необходимы для конкретной функции (их может быть несколько).

    Если библиотека использует pkg-config , вы должны использовать ее, а не жестко кодировать заголовок и пути библиотеки. Однако не все библиотеки используют его. Обычно вы можете сказать, потому что пакет библиотеки вашего дистрибутива должен зависеть от его пакета pkg-config (например, dpkg -s libglib2.0-dev |grep '^Depends:.*pkg-config' ).

    Если документация действительно плохая, попробуйте указать символы, определенные библиотекой:

     nm -D /usr/lib/x86_64-linux-gnu/libgio-2.0.so |awk '$2=="T" {print $3}' 

    Это не очень надежный способ, потому что он не скажет вам, нужна ли и другая библиотека.

    Interesting Posts

    Является ли использование файлов cookie из веб-браузера разумным обоснованием для разработки настольных приложений?

    grep a awk string из файла и записать в другую часть файла строки

    Файл `power / persist` не найден в каталоге sysfs устройства USB

    Как программно читать текущий контент терминала?

    Приложение для отладки последовательного порта для Linux

    Что вы делаете для сканирования с разрешением 600 dpi при работе с небольшим выходным файлом?

    Обновить заголовок таблицы относительно имени файла

    Как удалить повторяющиеся строки, начинающиеся с шаблона и следующей строки после этого?

    Как выводить только имена файлов (с пробелами) в ls -Al?

    Какая служба systemd запускает текстовую консоль на устройстве framebuffer?

    Почему мой $ PATH не наследуется вызванным bash?

    В терминале osx, как открыть EMACS в новом окне?

    Создание резервных серверов

    iw: какова пропускная способность канала по умолчанию?

    Извлечение данных из свободного места на диске 600Go после того, как этот диск был dd = / dev / {этот диск} с данными 4Go

    Linux и Unix - лучшая ОС в мире.