Разделяемые библиотеки: 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).
См. также: зависимости и библиотеки