EMZETT.
Войти

Разделяемые библиотеки: DLL и .so

Коротко: Разделяемые библиотеки (DLL в Windows, .so в Linux, .dylib в macOS) загружаются в программу при запуске или во время выполнения и используются многими программами совместно.

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

Подробности

  • Преимущества разделяемых библиотек: Меньше памяти (код лежит в ОЗУ один раз), исправления без пересборки программ, меньшие файлы.
  • Недостатки: «DLL-ад» при конфликте версий, программа не запускается, если библиотеки нет (libfoo.so: cannot open shared object file).
  • Поиск: Динамический загрузчик ищет по заданным путям. В Linux: LD_LIBRARY_PATH, /etc/ld.so.conf, зашитый RPATH. В Windows сначала в папке программы.
  • Инструменты: ldd программа (Linux) показывает зависимости, otool -L в macOS, Dependencies/dumpbin в Windows.
  • Статическая против динамической: Статически скомпонованные программы (Go, по умолчанию Rust) легко поставлять, динамические проще обновлять.
  • Безопасность: Подброшенная библиотека в пути поиска — известный путь атаки (DLL hijacking).

См. также: зависимости и библиотеки