.so
файлы являются динамическими библиотеками . Суффикс означает «общий объект», поскольку все приложения, связанные с библиотекой, используют один и тот же файл, а не делают копию в результирующем исполняемом файле.
.a
файлы являются статическими библиотеками . Суффикс расшифровывается как «архив», потому что на самом деле это просто архив (созданный с помощью ar
команды - предшественник, tar
который теперь используется только для создания библиотек) исходных объектных файлов .o.
.la
файлы - это текстовые файлы, используемые пакетом GNU «libtools» для описания файлов, составляющих соответствующую библиотеку. Вы можете найти больше информации о них в этом вопросе: Для чего нужен файл .la libtool?
Статические и динамические библиотеки имеют свои плюсы и минусы.
Static pro: пользователь всегда использует версию библиотеки, которую вы протестировали с вашим приложением, поэтому не должно быть никаких проблем с совместимостью.
Статический довод: если проблема устранена в библиотеке, вам нужно распространить свое приложение, чтобы воспользоваться этим преимуществом. Однако, если это не библиотека, которую пользователи, скорее всего, будут обновлять самостоятельно, вам, возможно, придется сделать это в любом случае.
Dynamic pro: объем памяти вашего процесса меньше, поскольку память, используемая для библиотеки, амортизируется среди всех процессов, использующих библиотеку.
Dynamic Pro: библиотеки могут быть загружены по требованию во время выполнения; это хорошо для плагинов, поэтому вам не нужно выбирать плагины, которые будут использоваться при компиляции и установке программного обеспечения. Новые плагины могут быть добавлены на лету.
Динамический довод: библиотека может отсутствовать в системе, в которой кто-то пытается установить приложение, или может иметь версию, несовместимую с приложением. Чтобы смягчить это, пакет приложения, возможно, должен включать копию библиотеки, поэтому он может установить ее при необходимости. Это также часто смягчается менеджерами пакетов, которые могут загружать и устанавливать любые необходимые зависимости.
Динамические библиотеки особенно полезны для системных библиотек, например libc
. Эти библиотеки часто должны включать код, который зависит от конкретной ОС и версии, поскольку интерфейсы ядра изменились. Если вы свяжете программу со статической системной библиотекой, она будет работать только в той версии ОС, для которой эта версия библиотеки была написана. Но если вы используете динамическую библиотеку, она автоматически подберет библиотеку, установленную в системе, на которой вы работаете.