← Назад к вопросам

В чем разница между статической и динамической библиотекой?

2.3 Middle🔥 161 комментариев
#Сборка и инструменты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между статической и динамической библиотекой

Это один из фундаментальных концептов в разработке C/C++ приложений. Обе используются для переиспользования кода, но имеют существенные различия в способе линкования и загрузки.

Статическая библиотека (Static Library)

Статическая библиотека — это архив объектных файлов, которые встраиваются в исполняемый файл на этапе компиляции.

  • Расширение: .a (Unix/Linux) или .lib (Windows)
  • Когда линкуется: На этапе компиляции (link time)
  • Размер исполняемого файла: Увеличивается
  • Runtime зависимости: Отсутствуют
  • Команда создания: ar rcs libname.a *.o

Динамическая библиотека (Dynamic Library)

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

  • Расширение: .so (Unix/Linux) или .dll (Windows), .dylib (macOS)
  • Когда линкуется: На этапе выполнения (runtime)
  • Размер исполняемого файла: Меньше
  • Runtime зависимости: Требует наличие .so/.dll на целевой системе
  • Команда создания: gcc -fPIC -shared -o libname.so *.o

Сравнительная таблица

АспектСтатическаяДинамическая
ВстраиваниеВ исполняемый файлОтдельный файл
Размер приложенияБольшеМеньше
Скорость загрузкиБыстрееМедленнее (загрузка либы)
ЗависимостиНетНужны .so/.dll файлы
ВерсионированиеСложнееПроще менять версии
Обновление кодаПересборка приложенияДостаточно заменить .so

Пример компиляции

// mylib.h
void print_hello();

// mylib.cpp
#include <iostream>
void print_hello() {
    std::cout << "Hello from library!\n";
}

Статическая библиотека:

g++ -c mylib.cpp -o mylib.o
ar rcs libmylib.a mylib.o
g++ -o app main.cpp -L. -lmylib

Динамическая библиотека:

g++ -fPIC -c mylib.cpp -o mylib.o
g++ -shared -o libmylib.so mylib.o
g++ -o app main.cpp -L. -lmylib
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH && ./app

Когда использовать

Статическая библиотека:

  • Приложение должно быть полностью независимым
  • Нет необходимости в частых обновлениях
  • Критична скорость запуска

Динамическая библиотека:

  • Несколько приложений используют одну библиотеку
  • Нужна возможность обновления без пересборки
  • Нужно экономить дисковое пространство
  • Разработка крупных систем с множеством компонентов

Позиционирование символов (PIC)

Для создания динамической библиотеки используется флаг -fPIC (Position Independent Code). Это позволяет библиотеке быть загруженной в любой адрес памяти, так как статические адреса неизвестны на момент компиляции.

Вывод: Выбор между статической и динамической библиотекой зависит от требований проекта. Статическая даёт независимость и скорость, динамическая — экономию ресурсов и гибкость.

В чем разница между статической и динамической библиотекой? | PrepBro