Операционная система UNIX. Руководство программиста

Создание файла спецификаций библиотеки


После подготовки исходного текста для разделяемой библиотеки Вам нужно создать файл спецификаций. Этот файл содержит всю информацию, необходимую mkshlib(1) для создания файлов разделяе- мой библиотеки сборки и выполнения. Пример файла спецификаций приводится ниже, в разделе Пример. В файл спецификаций включаются следующие директивы [см. также mkshlib(1)]:

#address секция адрес
Указывает начальный адрес секции разделяемой библиотеки выполнения. Эта директива обычно используется для задания начальных адресов секций .text и .data.
#target маршрутное_имя
Указывает маршрутное_имя разделяемой библиотеки выполнения, по которому она будет находиться на целевом компьютере. По указанному маршрутному имени операционная система ищет разделяемую библиотеки выполнения, когда она нужна выполняемому файлу. Обычно, хотя и не обязательно, маршрутное_имя задает полный маршрут. Эта директива должна встречаться в файле спецификаций один и только один раз.
#branch
Отмечает начало спецификаций таблицы переходов. Строки, следующие за этой директивой, воспринимаются как строки спецификации таблицы переходов. Последние имеют следующий формат:

имя_функции пробел_или_табуляция позиция

Здесь имя_функции - это имя, для которого задается элемент таблицы переходов, а позиция задает позицию этого элемента в таблице. Позиция может быть целым числом или диапазоном целых чисел в формате позиция1-позиция2. Каждая позиция должна быть больше нуля и не может быть указана дважды. В таблице переходов не должно быть пропущенных позиций, то есть каждое число от 1 и до максимального указанного должно быть задействовано.

Если для имени указывается несколько элементов таблицы переходов (путем спецификации для него диапазона позиций или указания этого имени в нескольких строках спецификаций таблицы переходов), то используется максимальная из указанных позиций. Остальные выделенные для него позиции можно считать пустыми и выделять их другим именам в будущих версиях библиотеки.

Элементы таблицы переходов следует задавать только для функций, доступных извне библиотеки (экспортируемых).

Данная директива должна встречаться в файле спецификаций один и только один раз.



Данная директива должна встречаться в файле спецификаций один и только один раз. Здесь указатель - это указатель на внешнее (импортируемое) имя; он должен определяться в объектном_файле. Для каждой такой строки генерируются инструкции, соответствующие следующему оператору присваивания языка C: указатель=&имя; Об инициализации указателей см. ниже. Все спецификации инициализации для указанного объектного_файла должны быть собраны вместе, повторное указание того же объектного_файла не допускается. Данная директива должна встречаться в файле спецификаций один и только один раз.
#objects
Задает имена объектных модулей, из которых собирается разделяемая библиотека выполнения. Строки, следующие за этой директивой, воспринимаются как список объектных файлов, в том порядке, в котором они должны быть загружены в разделяемую библиотеку выполнения. Этот список состоит из имен объектных файлов, разделенных пробелами или символами табуляции. Из этих объектных файлов и будет состоять разделяемая библиотека.
#init объектный_файл
Указывает, что объектный_файл требует включения инструкций инициализации. Последующие строки рассматриваются как спецификации таких инструкций и должны иметь следующий формат: указатель пробел_или_табуляция имя
#ident цепочка_символов
Задает цепочку_символов, которая будет включена в секцию .comment разделяемой библиотеки выполнения, а также в одноименные секции каждого из объектных модулей разделяемой библиотеки сборки.
## комментарий
Остаток строки игнорируется.



Содержание раздела