Мета роботи

Вивчити прийоми та методи створення та використання статичний та динамічних бібліотек

2.2 Підготовка до роботи

2.2.1 Загальна характеристика статичних бібліотек

Статичні бібліотеки (файл з розширенням lib) компонується разом з додатком, в якому використовується ця бібліотека.

Переваги статичних бібліотек:

- статична бібліотека утворює разом з рештою додатку єдине ціле, тобто для використання додатка достатньо мати один файл типу .exe.

- простота використання за рахунок того, що використання функції зі статичної бібліотеки нічим не відрізняється від використання функцій, визначений в додатку.

Недоліки статичних бібліотек:

- бібліотеки залежать від середовища, в якому вони створені. Так бібліотека, яку було створено в середовищі С++ Builder, не можна використовувати в середовищі Visual Studio та навпаки;

- при зміні коду бібліотеки потрібна повторна компоновка усіх додатків, які використовують бібліотеку;

- якщо декілька додатків використовують одну і ту ж бібліотеку, копія цієї бібліотеки зберігається в пам’яті кожного додатку.

2.2.2 Загальна характеристика динамічних бібліотек

Динамічні бібліотеки (Dynamic Link Library - DLL), файли з розширенням DLL, завантажуються під час завантаження модуля, який використовує бібліотеку, або під час його виконання.

Переваги DLL:

- бібліотеки не залежать від середовища, в якому вони створені. Так бібліотека, яку було створено в середовищі С++ Builder, можна використовувати в середовищі Visual Studio та навпаки;

- при зміні коду бібліотеки не потрібна повторна компоновка додатків, які використовують цю бібліотеку, ось чому операційна система використовує цей тип бібліотек для модулів, які можуть змінюватися в залежності від версії та в разі помилок;

- якщо декілька додатків використовують одну і ту ж бібліотеку, копія цієї бібліотеки зберігається в пам’яті тільки один раз.

Недоліки DLL:

- окрім програми, яка виконується необхідно мати додатковий модуль – саму бібліотеку;

- функції DLL використовувати складніше, ніж функції статичної бібліотеки.

Решта переваг та недоліків DLL залежать від режимів використання бібліотеки цього типу.

Порівняйте переваги і недоліки кожного типу бібліотек і зробіть висновки по тому. коли треба використовувати кожний тип бібліотеки!

2.2.3 Створення статичних бібліотек

Незалежно від середовища, в бібліотеку можна підключати C++, C, OBJ файли. Файли на мові Асемблер мають особливості, які залежать від середовища, тому краще усі функції писати з заголовком на мові С.

Розглянемо формування статичної бібліотеки для Visual Studio 2008, для інших середовищ бібліотеки створюються подібно.

Спосіб 1. Використання середовища. Виконати Project®Win32 Project і далі обрати в Application Settings - Static library і далі натиснути Finish. До проекту можна додавати як нові компоненти, так і вже існуючі. у тому числі інші статичні бібліотеки. Серед модулів, які додаються не може бути модуля з визначенням головної функції. В результаті буде сформовано файл *.lib. Ім’я бібліотеки співпадає з іменем проекту, його можна замінити. Бібліотека вміщує довідник функцій, в якому для кожної функції визначається її відносна адреса і розмір. Після довідника розташовані самі функції.

Недолік цього способу – треба ввійти в середовище для розробки при довільних змінах в бібліотеці, наприклад, додавання коментаря.

Спосіб 2. Використання командного файлу. Для створення бібліотеки необхідно виконати:

- компіляцію усіх файлів з розширенням c, cpp (програма cl.exe);

- створення бібліотеки з окремих об’єктних модулів (програма lib.exe).

При завданні програм для виконання необхідно задавати повне ім’я файлу.

Для програми cl.exe дуже багато параметрів, але обов’язковими є тільки:

/I " Шлях до каталогу include Visual Studio ", якщо використовуються стандартні файли заголовків;

/c – тільки компіляція (компонувальник не використовується);

Приклад рядка для виклику cl.exe, якщо каталог для двійкових файлів"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin, каталог для стандартних файлів – заголовків: c:\Program Files\Microsoft Visual Studio 9.0\VC\include, а в бібліотеку треба підключити функції з файлу static.cpp:

"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.exe" /I "c:\Program Files\Microsoft Visual Studio 9.0\VC\include" /c static.cpp

Для перевірки успішності завершення компіляції (не було помилок компіляції) використовуємо рядок:

if ErrorLevel 1 goto merror

Для програми lib.exe в якості параметрів задаються:

/OUT: Імя файлу – бібліотеки з розширенням lib;

Імена об’єктних файлів, та бібліотек, які необхідно підключити до бібліотеки.

Приклад рядка для виклику lib.exe, якщо каталог для двійкових файлів"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin і в бібліотеку підключається файл static.obj:

"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\lib.exe" /OUT:static.lib static.obj

Для перевірки успішності створення бібліотеки використовуємо рядок:

if ErrorLevel 1 goto merror

Після створення бібліотеки знищуємо непотрібні файли типу .obj (рядок del *.obj)

Таким чином, командний файл (назвемо його static.cmd):

"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.exe" /I "c:\Program Files\Microsoft Visual Studio 9.0\VC\include" /c static.cpp

if ErrorLevel 1 goto merror

"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\lib.exe" /OUT:static.lib static.obj

if ErrorLevel 1 goto merror

del *.obj

echo ok

goto mok

:merror

echo error

:mok

Порівняйте бібліотеки, створені в середовищі, та за допомогою командного файлу!