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

Довольно часто я использую сторонние фрагменты кода 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 и найти его местоположение. Есть ли что-то вроде команды терминала для определения имени библиотеки?

  • C ++ system () в bash-скрипте с при выполнении по-разному
  • Найти информацию о USB-устройствах на C ++
  • Почему процесс «ребенка» заканчивается перед его родителем?
  • мой модем gsm echo моя команда на mini2440
  • x86 Emulator для Linux с подробной отладкой
  • Можно ли напрямую запрашивать информацию о процессе из ядра Linux?
  • Что означает «системный вызов», если не реализация на языке программирования?
  • libfaketime и Mac OS, LD_PRELOAD
  • 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

    Как получить определенную строку в xml с помощью python или perl и т. Д.

    Справочник по умолчанию по умолчанию

    Файл хостов: неверно ли иметь один и тот же IP-адрес на нескольких строках?

    Обновление PATH не остается после перезагрузки

    Почему люди Linux всегда говорят, чтобы прочитать руководство?

    Файл makefile для fortran-кода

    screen & xterm: как выбрать текст с помощью мыши в одной панели, когда окно разделено по вертикали

    Как и где устанавливать библиотеку только для заголовков?

    Что определяет максимальный размер файла в файловой системе ext2

    Могу ли я сказать, чтобы найти, чтобы не восстановить исходный рабочий каталог?

    Добавить DNS-серверы имен в OpenBSD

    Оптимизированный способ отображения и удаления файлов

    Yum всегда перечисляет некоторые пакеты

    Как повторить нулевое заполненное целое число в bash?

    Можно ли использовать df для использования / proc / mounts вместо / etc / mtab?

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