Статична бібліотека

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

Переваги і недоліки

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

Недоліком статичного лінкування є суттєве збільшення розмірів файлів, через наявність у них бібліотечних функцій. Втім, це не має значення, якщо програма є повністю незалежною від стандартних бібліотек виконання (наприклад, програма, написана на мові Pascal для Unix-подібних операційних систем, може бути повністю незалежною від стандартних бібліотек мови C[2]).

Особливості у різних ОС

У Microsoft Windows є звичайною практикою включати бібліотечні файли разом з програмою при її розповсюдженні.[3] У Unix-подібних операційних системах такий підхід значно менше розповсюджений, оскільки системи керування пакунками зазвичай можуть відслідкувати залежності і гарантувати, що потрібні розділювані бібліотеки присутні у системі. Динамічний підхід заощаджує місце на диску і дозволяє просте оновлення бібліотек (наприклад, коли у них виявляються уразливості — якби всі програми були зв'язані статично, то для усунення уразливості бібліотечної функції довелося б оновлювати кожну програму окремо).

Компонування і завантаження

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

Всі виклики підпрограм при статичному компонуванні є простими командами переходу (такими, як call у архітектурі x86).

Незвичайним застосуванням статичних бібліотек або об'єктних файлів є їх компонування на етапі виконання. Такий підхід використовувався, зокрема, у завантажнику модулів X Window System.[джерело?]

Статичні бібліотеки як набори об'єктних файлів

Створення статичних бібліотек є простим при програмуванні на 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

Див. також

Джерела

  1. Static Libraries. TLDP. Процитовано 3 жовтня 2013.
  2. Static linking. FPC libraries (англ.). «FPC compiles and links a static executable by default. That means it tells the linker to put all .o files of the project and all packages into one big executable.»
  3. Anderson, Rick (11 січня 2000). The End of DLL Hell (англ.). microsoft.com. Архів оригіналу за 5 червня 2001. Процитовано 31 серпня 2013. «Private DLLs are DLLs that are installed with a specific application and used only by that application.»
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.