Спільна бібліотека — це бібліотека виконуваного коду, яка завантажується в пам'ять таким чином, що кілька виконуваних файлів (програм та інших бібліотек) можуть використовувати її під час виконання.

На відміну від цього, статична бібліотека копіюється у виконуваний файл. Статичну бібліотеку можна повторно використовувати, але кожен виконуваний файл містить копію коду бібліотеки замість спільного використання однієї копії в пам'яті з іншими виконуваними файлами. Хоча сьогодні це вже не так, історично всі бібліотеки були статичними.

Часто спільна бібліотека також є динамічною бібліотекою, завантажуваною динамічним компонувальником, що загалом полегшує використання бібліотеки для програміста, ніж якби вона натомість мала статичне компонування. Динамічна бібліотека не обов'язково має бути доступною для кількох виконуваних файлів (спільна бібліотека), а спільна бібліотека не обов'язково має завантажуватися під час виконання програмою, що її використовує (динамічна бібліотека).

Спільне використання пам'яті

Код бібліотеки може спільно використовуватися в пам'яті кількома процесами. Якщо використовується віртуальна пам'ять, процеси виконують одну й ту саму фізичну сторінку оперативної пам'яті, відображену у різні адресні простори процесів. Це має свої переваги. Наприклад, у системі OpenStep програми часто мали розмір лише кілька сотень кілобайтів і швидко завантажувалися; більша частина їхнього коду містилася в бібліотеках, які вже були завантажені операційною системою для інших цілей.

Програми можуть забезпечувати спільне використання оперативної пам'яті за допомогою позиційно-незалежного коду, як в Unix, що призводить до складної, але гнучкої архітектури, або за допомогою спільних віртуальних адрес, як у Windows та OS/2. Ці системи забезпечують високу ймовірність спільного використання коду різними способами, наприклад попереднім відображенням адресного простору та резервуванням слотів для кожної спільної бібліотеки. Третім варіантом є однорівневе сховище з єдиним адресним простором, як у IBM System/38 та її наступниках. Це дозволяє використовувати позиційно-залежний код, причому програмам і бібліотекам призначається постійна адреса в цьому адресному просторі.

У деяких випадках різні версії спільних бібліотек можуть спричиняти проблеми, особливо коли бібліотеки різних версій мають однакове ім'я файлу, а в системі встановлено різні застосунки, кожен із яких потребує певної версії. Такий сценарій відомий як DLL hell, названий за файлами DLL у Windows та OS/2. Більшість сучасних операційних систем після 2001 року мають методи очищення для усунення таких ситуацій або використовують специфічні для застосунків «приватні» бібліотеки.

Приклади Наведені нижче широко використовувані технології бібліотек є одночасно спільними та динамічними за своєю природою.

DLL Windows використовує формат Portable Executable (PE) для своєї технології DLL.

SO Solaris та інші системи на основі System V Release 4, Linux і сучасні системи BSD використовують формат Executable and Linkable Format (ELF) для технології спільних об'єктів (SO), яку іноді, точніше, називають динамічним спільним об'єктом (DSO).

DYLIB Операційні системи на основі Darwin, такі як macOS та iOS, використовують формат Mach-O для файлів .dylib.

Див. також Завантажуваний модуль ядра

Примітки