Об'єктні бібліотеки
Крупні програми часто складаються з сотень і тисяч окремих модулів. Крім
того, існують різні пакети підпрограм, що також полягають Про
великої кількості модулів. Один з таких пакетів використовується практично в
будь-якій програмі на мові високого рівня — це так звана стандартна бібліотека.
Для вирішення проблем, що виникають при підтримці порядку в
наборах з великої кількості об'єктних модулів, еше на зорі обчислювальної
техніки були придумані бібліотеки об'єктних модулів.
Бібліотека, як правило, є послідовним файлом, що складається
із заголовка, за яким послідовно розташовуються об'єктні модулі
(мал. 3.11). У заголовку міститься наступна інформація.
- Список всіх об'єктних модулів, із
зсувом кожного модуля від початку бібліотеки. Зсув потрібний для того,
щоб можна було легко знайти необхідний модуль.
- Список всіх глобальних символів, визначених в кожному
з модулів, з вказівкою, в якому саме модулі він був визначений.

Мал. 3.11. Об'єктна бібліотека
Лінкер (мал. 3.12) зазвичай збирає в програму
всі об'єктні модулі, які були йому задані в командному рядку, навіть якщо
на цей модуль не було жодного заслання. З бібліотечними модулями він поводиться
трохи інакше.
Зустрівши
заслання на глобальний символ, компонувальник шукає визначення цього символу
у всіх модулях, які йому були задані. Якщо там такого символу немає,
то лінкер шукає цей символ в заголовку бібліотеки. Якщо його немає і там,
компонувальник повідомляє: "Не визначений символ SYMBOL", - і
завершує роботу. Деякі редактори зв'язків, правда, можуть Продовжити
роботу і навіть зібрати завантажуваний модуль, але, як правило, таким модулем
користуватися не можна, оскільки в нім міститься заслання на некоректну адресу.
Якщо ж визначення символу в бібліотеці є, компонувальник "витягує"
відповідний модуль ц далі працює так, ніби цей модуль був заданий
йому нарівні з остальным^ об'єктними файлами. Цей процес повторюється
до тих пір, поки не будуть дозволені всі глобальні заслання, у тому числі
і ті, які виникли в бібліотечних модулях, або доки не буде виявлений
невизначений символ. Завдяки такому алгоритму в програму включаються
лише ті модулі з бібліотеки, які потрібні.
У системах сімейства Unix бібліотеки такої структури називаються архівними
бібліотекамиаби відрізнити їх від бібліотек, що розділяються, які
розглядаються в разд. Динамічні
бібліотеки і Бібліотеки, що розділяються.
Мал. 3.12. Блок-схема
роботи редактора зв'язків
|