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

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

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}' 

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

  • каковы флагов этой микроархитектуры?
  • gcc: -pthread: нет такого файла или каталога
  • Как скомпилировать Solaris в Debian?
  • open () вернуть новый дескриптор файла posix
  • Перезагружает ли SO_ATTACH_FILTER буфер приема сокета?
  • построение кода из исходного кода и добавление их к вашему пути
  • / dev / tcp не присутствует в Linux
  • «Фатальная ошибка: stdio.h: нет такого файла или каталога» при компиляции файла C
  • / usr / bin /, который возвращает загадочную ошибку ", которая: no ls in ((null))"
  • Как написать программное обеспечение для компиляции с внешними библиотеками?
  • Скомпилированный исполняемый файл
  • Ловушки системы вызова (3) или popen (3) с постоянной строкой?
  • Linux и Unix - лучшая ОС в мире.