В этом руководстве для программистов обсуждается, как создавать и использовать программные библиотеки в Linux. Это включает в себя статические библиотеки, общие библиотеки и динамически загружаемые библиотеки.

Содержание

Введение
Статические библиотеки
Общие библиотеки
Динамически загружаемые (DL) библиотеки
Разное
Больше примеров
Другие источники информации
Авторское право и лицензия

 

Введение

 Это руководство для программистов рассматривает как создавать и использовать программные библиотеки на Linux, используя GNU toolset. Программная «библиотека» это просто файл, содержащий скомпилированный код (и данные), которые могут быть включены позже в программу; программные библиотеки позволяют программам быть более модульными, быстрее перекомпилироваться и делают обновление проще. Программные библиотеки могут быть разделены на три типа: статические библиотеки, динамические библиотеки и динамически загружаемые (DL) библиотеки.

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

 Большинство разработчиков, которые разрабатывают библиотеки, должны создавать общие библиотеки, поскольку они позволяют пользователям обновлять свои библиотеки отдельно от приложений, которые используют библиотеки. Динамически загружаемые (DL) библиотеки полезны, но для их использования требуется немного больше работы, и многим программам не требуется гибкость, которую они предлагают. И наоборот, статические библиотеки делают обновление библиотек гораздо более проблематичным, поэтому трудно рекомендовать их для общего использования. Тем не менее, у каждого типа библиотек есть свои преимущества, и преимущества каждого из этих типо описаны в соответствующем разделе. Разработчики, использующие C++ и динамически загружаемые (DL) библиотеки, также должны обратиться к «C++ dlopen mini-HOWTO».

 Стоит отметить, что некоторые люди используют термин dynamically linked libraries (DLL) для обозначения общих библиотек, некоторые используют термин DLL для обозначения любой библиотеки, которая используется в качестве DL библиотеки, а некоторые используют термин DLL для обозначения библиотеки, удовлетворяющей любому условию. Независимо от того, какое значение вы выберете, это руководство охватывает библиотеки DLL в Linux.

 Это руководство рассматривает только формат ELF (Executable and Linking Format) для исполняемых файлов и библиотек, формат, используемый сегодня почти во всех дистрибутивах Linux. Набор инструментов GNU gcc toolset может на самом деле обрабатывать форматы библиотек, отличные от ELF; в частности, большинство дистрибутивов Linux по-прежнему могут использовать устаревший формат a.out. Однако эти форматы выходят за рамки данной статьи.

 Если вы создаете приложение, которое необходимо портировать на многие системы, вы можете рассмотреть возможность использования GNU libtool для сборки и установки библиотек вместо непосредственного использования инструментов Linux. GNU libtool — это универсальный скрипт поддержки библиотек, который скрывает сложность использования общих библиотек (например, их создание и установка) за единообразным, переносимым интерфейсом. В Linux GNU libtool построен на основе инструментов и соглашений, описанных в этом руководстве. Для переносимого интерфейса к динамически загружаемым библиотекам вы можете использовать различныепереносимые обертки. GNU libtool включает в себя такую ​​оболочку, которая называется «libltdl». В качестве альтернативы вы можете использовать библиотеку glib (не путать с glibc) с ее переносимой поддержкой динамической загрузки модулей. Вы можете узнать больше о динамической загрузке модулей в glib по адресу http://library.gnome.org/devel/glib/stable/glib-Dynamic-Loading-of-Modules.html. Опять же, в Linux эта функциональность реализована с использованием конструкций, описанных в этом руководстве. Если вы на самом деле разрабатываете или отлаживаете код в Linux, вам, вероятно, понадобится информация из этого руководства.

Главное местоположение этого руководства это http://www.dwheeler.com/program-library/, и оно было внесено в Linux Documentation Project (http://www.linuxdoc.org). Авторское право Copyright © 2000 David A. Wheeler, и лицензируется через General Public License (GPL); см. последний раздел для получения дополнительной информации.


Этот раздел является переводом руководства Program Library HOWTO


   Содержание Вперед>>>