Создание файла спецификаций библиотеки
После подготовки исходного текста для разделяемой библиотеки Вам нужно создать файл спецификаций. Этот файл содержит всю информацию, необходимую mkshlib(1) для создания файлов разделяе- мой библиотеки сборки и выполнения. Пример файла спецификаций приводится ниже, в разделе Пример. В файл спецификаций включаются следующие директивы [см. также mkshlib(1)]:
#address секция адрес | |
Указывает начальный адрес секции разделяемой библиотеки выполнения. Эта директива обычно используется для задания начальных адресов секций .text и .data. | |
#target маршрутное_имя | |
Указывает маршрутное_имя разделяемой библиотеки выполнения, по которому она будет находиться на целевом компьютере. По указанному маршрутному имени операционная система ищет разделяемую библиотеки выполнения, когда она нужна выполняемому файлу. Обычно, хотя и не обязательно, маршрутное_имя задает полный маршрут. Эта директива должна встречаться в файле спецификаций один и только один раз. | |
#branch | |
Отмечает начало спецификаций таблицы переходов. Строки, следующие за этой директивой, воспринимаются как строки спецификации таблицы переходов. Последние имеют следующий формат:
имя_функции пробел_или_табуляция позиция |
Здесь имя_функции - это имя, для которого задается элемент таблицы переходов, а позиция задает позицию этого элемента в таблице. Позиция может быть целым числом или диапазоном целых чисел в формате позиция1-позиция2. Каждая позиция должна быть больше нуля и не может быть указана дважды. В таблице переходов не должно быть пропущенных позиций, то есть каждое число от 1 и до максимального указанного должно быть задействовано.
Если для имени указывается несколько элементов таблицы переходов (путем спецификации для него диапазона позиций или указания этого имени в нескольких строках спецификаций таблицы переходов), то используется максимальная из указанных позиций. Остальные выделенные для него позиции можно считать пустыми и выделять их другим именам в будущих версиях библиотеки.
Элементы таблицы переходов следует задавать только для функций, доступных извне библиотеки (экспортируемых).
Данная директива должна встречаться в файле спецификаций один и только один раз.
#objects | |
Задает имена объектных модулей, из которых собирается разделяемая библиотека выполнения. Строки, следующие за этой директивой, воспринимаются как список объектных файлов, в том порядке, в котором они должны быть загружены в разделяемую библиотеку выполнения. Этот список состоит из имен объектных файлов, разделенных пробелами или символами табуляции. Из этих объектных файлов и будет состоять разделяемая библиотека. | |
#init объектный_файл | |
Указывает, что объектный_файл требует включения инструкций инициализации. Последующие строки рассматриваются как спецификации таких инструкций и должны иметь следующий формат: указатель пробел_или_табуляция имя | |
#ident цепочка_символов | |
Задает цепочку_символов, которая будет включена в секцию .comment разделяемой библиотеки выполнения, а также в одноименные секции каждого из объектных модулей разделяемой библиотеки сборки. | |
## комментарий | |
Остаток строки игнорируется. |