Мета роботи
Вивчити прийоми та методи створення та використання статичний та динамічних бібліотек
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
Порівняйте бібліотеки, створені в середовищі, та за допомогою командного файлу!