Топ питань
Часова шкала
Чат
Перспективи
Статична бібліотека
набір підпрограм (процедур, функцій), оформлений у вигляді архіву З Вікіпедії, вільної енциклопедії
Remove ads
Статична бібліотека (також бібліотека статичного зв'язування) — поняття у інформатиці, що означає бібліотеку підпрограм, яка зв'язується (компонується) з програмою на етапі побудови. Підпрограми таким чином копіюються безпосередньо у двійковий файл програми, що створюється.[1] Програма, побудована таким чином, називається статичною, на противагу динамічній, що потребує компонування з бібліотеками на етапі виконання.
Remove ads
Переваги і недоліки
Узагальнити
Перспектива
Основною перевагою статичного зв'язування у порівнянні з динамічним є те, що програма є незалежною від зовнішніх файлів бібліотек. Іншими словами, всі бібліотечні функції вже містяться всередині програми, і їх версії є саме тими, які використовувалися при побудові програми. Таким чином усувається пекло динамічних бібліотек (або іншими словами пекло залежностей), а дистриб'юція і встановлення програми максимально спрощуються.
Недоліком статичного лінкування є суттєве збільшення розмірів файлів, через наявність у них бібліотечних функцій. Втім, це не має значення, якщо програма є повністю незалежною від стандартних бібліотек виконання (наприклад, програма, написана на мові Pascal для Unix-подібних операційних систем, може бути повністю незалежною від стандартних бібліотек мови C[2]).
Особливості у різних ОС
У Microsoft Windows є звичайною практикою включати бібліотечні файли разом з програмою при її розповсюдженні.[3] У Unix-подібних операційних системах такий підхід значно менше розповсюджений, оскільки системи керування пакунками зазвичай можуть відслідкувати залежності і гарантувати, що потрібні розділювані бібліотеки присутні у системі. Динамічний підхід заощаджує місце на диску і дозволяє просте оновлення бібліотек (наприклад, коли у них виявляються уразливості — якби всі програми були зв'язані статично, то для усунення уразливості бібліотечної функції довелося б оновлювати кожну програму окремо).
Remove ads
Компонування і завантаження
Завантаження двійкового файлу програми, що містить бібліотечний код, відбувається стандартними засобами операційної системи (такими, як exec
або spawn
).
Всі виклики підпрограм при статичному компонуванні є простими командами переходу (такими, як call
у архітектурі x86).
Незвичайним застосуванням статичних бібліотек або об'єктних файлів є їх компонування на етапі виконання. Такий підхід використовувався, зокрема, у завантажнику модулів X Window System.[джерело?]
Remove ads
Статичні бібліотеки як набори об'єктних файлів
Створення статичних бібліотек є простим при програмуванні на C або C++. Якщо деяка функція не позначена як static
, вона буде видимою за межами об'єктного файлу, де вона розташовується. Для створення статичної бібліотеки з об'єктних файлів достатньо скористатися програмою ar (або аналогічною у Microsoft Windows чи DOS); отриманий файл матиме суфікс «.a»[1] (англ. archive) або «.lib» у Windows, DOS і OS/2.
Приклади
Unix
Щоб створити архів libclass.a з файлів class1.o, class2.o, class3.o можна запустити таку команду:[1]
ar rcs libclass.a class1.o class2.o class3.o
Для статичного зв'язування програми main з модулями class1.o, class2.o і class3.o, що знаходяться у щойно створеній бібліотеці:
cc main.c libclass.a
або (якщо libclass.a знаходиться у стандартному місці, такому як /usr/local/lib)
cc main.c -lclass
Якщо для лінкування використати безпосередньо програму ld
:
ld ... main.o -lclass ...
Замість статичної бібліотеки можна просто вказати набір об'єктних файлів:
cc main.c class1.o class2.o class3.o
Microsoft Windows
У Windows аналогом програми ar
є LIB
(формат файлів, що генерується цими програмами, не відрізняється). Щоб створити бібліотеку some.lib
з файлів f1.obj
і f2.obj
достатньо виконати команду:
lib /out:some.lib f1.obj f2.obj
Remove ads
Див. також
- Бібліотека підпрограм
- Компонувальник
- Завантажник програм[en]
- Dynamic-link library
- Об'єктний модуль
- Prebinding[en]
Джерела
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads