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

Набір підпрограм (процедур, функцій), оформлений у вигляді архіву

Статична бібліотека (також бібліотека статичного зв'язування) — поняття у інформатиці, що означає бібліотеку підпрограм, яка зв'язується (компонується) з програмою на етапі побудови. Підпрограми таким чином копіюються безпосередньо у двійковий файл програми, що створюється.[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 (en). «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 (2000-01-11). The End of DLL Hell (en). microsoft.com. Архів оригіналу за 2001-06-05. Процитовано 2013-08-31. «Private DLLs are DLLs that are installed with a specific application and used only by that application.»