Библиотеки
C в *nix
системах (включая все дистрибутивы linux) создаются с помощью стандартных инструментов, такими инструментами являются: a) компилятор C, b) компоновщик, b) утилита ar, c) утилита ranlib.
Компилятор C 99,9% времени компилятор GNU C, в то время как компоновщик ld и утилиты ar
и ranlib
являются частью пакета binutils в системах GNU (99,9% систем Linux).
ar
и ranlib
используются для создания статических библиотек, помещения уже скомпилированных объектных файлов (* .o файлы) в архивный файл libsomething.a
с помощью ar и индексации архива с помощью ranlib.
В компиляторе gcc можно вызывать компоновщик для создания динамических библиотек с позиционно-независимым кодом, опять же уже скомпилированные файлы архивируются по специальному, этот файл имеет расширение .so
для общего объекта.
Статические библиотеки используются для скорости и самодостаточности, они производят большие исполняемые файлы, которые содержат все их зависимости внутри конечного исполняемого файла. Если в одной библиотеке много изменений, для ее обновления вам придется все перекомпилировать.
Динамические библиотеки скомпилированы и связаны отдельно от исполняемых файлов, они могут использоваться одновременно несколькими исполняемыми файлами, если обновляется одна библиотека, вам просто нужно перекомпилировать одну библиотеку, а не все исполняемые файлы, которые зависят от нее.
Использование этих инструментов является универсальной и стандартной процедурой, они могут варьироваться от нескольких деталей: от * nix систем до * nix систем, но в linux вы по существу всегда используете пакеты GCC и Binutils. Существуют дополнительные утилиты сборки в форме make, cmake, autotools и т. Д., Которые помогают в этом процессе, но основные инструменты всегда используются.
Обычно на самом базовом уровне вы пишете скрипт Makefile
, который интерпретируется утилитой make
. И в зависимости от ваших команд он может создавать один или оба вида библиотек, устанавливать библиотеки и исполняемые файлы, удалять их, очищать и т. Д.
Для получения дополнительной информации:
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
http://www.dwheeler.com/program-library/Program-Library-HOWTO/