Объектные библиотеки
Крупные программы часто состоят из сотен и тысяч отдельных
модулей. Кроме того, существуют различные пакеты подпрограмм, также состоящие
О большого количества модулей. Один из таких пакетов используется практически
в любой программе на языке высокого уровня — это так называемая стандартная
библиотека. Для решения проблем, возникающих при поддержании порядка в
наборах из большого количества объектных модулей, еше на заре вычислительной
техники были придуманы библиотеки объектных модулей.
Библиотека, как правило, представляет собой последовательный файл, состоящий
из заголовка, за которым последовательно располагаются объектные модули
(рис. 3.11). В заголовке содержится следующая информация.
- Список всех объектных модулей, со смещением каждого
модуля от начала библиотеки. Смещение нужно для того, чтобы можно было
легко найти требуемый модуль.
- Список всех глобальных символов, определенных в каждом
из модулей, с указанием, в каком именно модуле он был определен.
Рис. 3.11. Объектная библиотека
Линкер (рис. 3.12) обычно собирает в программу все объектные
модули, которые были ему заданы в командной строке, даже если на этот
модуль не было ни одной ссылки. С библиотечными модулями он ведет себя
несколько иначе.
Встретив ссылку на глобальный символ, компоновщик ищет определение этого
символа во всех модулях, которые ему были заданы. Если там такого символа
нет, то линкер ищет этот символ в заголовке библиотеки. Если его нет и
там, компоновщик сообщает: "Не определен символ SYMBOL",- и
завершает работу. Некоторые редакторы связей, правда, могут Продолжить
работу и даже собрать загружаемый модуль, но, как правило, таким модулем
пользоваться нельзя, так как в нем содержится ссылка на некорректный адрес.
Если же определение символа в библиотеке есть, компоновщик "вытаскивает"
соответствующий модуль ц дальше работает так, будто этот модуль был задан
ему наравне с остальным^ объектными файлами. Этот процесс повторяется
до тех пор, пока не будут разрешены все глобальные ссылки, в том числе
и те, которые возникли в библиотечных модулях, или пока не будет обнаружен
неопределенный символ. Благодаря такому алгоритму в программу включаются
только те модули из библиотеки, которые нужны.
В системах семейства Unix библиотеки такой структуры называются архивными
библиотеками, чтобы отличить их от разделяемых библиотек, которые
рассматриваются в разд. Динамические
библиотеки и Разделяемые библиотеки.
Рис. 3.12. Блок-схема
работы редактора связей
|