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




Пример - часть 3


4 #branch 5 excopy 1 6 excount 2

7 #objects 8 import.o 9 global.o 10 exam.o

11 #init import.o 12 _libexam_malloc malloc 13 _libexam_strcpy strcpy 14 _libexam_strlen strlen 15 _libexam_fprintf fprintf 16 _libexam__iob _iob

(Номера строк включены для удобства ссылок; они не являются частью примера.) Вкратце, в этом файле спецификаций указано следующее. В строке 1 задается маршрутное имя разделяемой библиотеки выполнения. В дальнейшем библиотека должна быть помещена в этот файл, чтобы использующие ее программы могли выпол- няться. Виртуальные адреса для секций команд и данных библиотеки задаются в строках 2 и 3 соответственно. В строках 4-6 описывается таблица. В строках 5 и 6 функциям excopy() и excount()

назначаются элементы 1 и 2 таблицы переходов. Напомним, что ее элементы должны назначаться только именам внешних функций.

В строках 7-10 перечисляются объектные файлы, из которых и будут собраны разделяемые библиотеки сборки и выполнения. В разделяемой библиотеке сборки каждый из них будет оформлен как отдельный элемент. В разделяемой библиотеке выполнения указанный порядок следования этих файлов сохранится. Первыми нужно указывать файлы данных, иначе, например, изменение размера статических переменных в exam.o привело бы к изменению адресов внешних переменных, после чего ранее созданные программы не смогли бы больше работать с этой библиотекой.

В строках 11-16 находятся данные о внешних именах файла import.o. Их можно понимать как своего рода операторы присваивания, например, _libexam_malloc будет содержать адрес malloc и т.д.

Далее, как и для архивной библиотеки, нужно создать объектные файлы:

cc -c import.c global.c exam.c

Осталось запустить mkshlib(1) для создания разделяемой библиотеки сборки и разделяемой библиотеки выполнения:

mkshlib -s libexam.sl -t libexam_s -h libexam_s.a

Если компиляция исходных текстов прошла нормально, mkshlib(1) создаст разделяемую библиотеку сборки libexam_s.a и разделяемую библиотеку выполнения libexam_s.




Содержание  Назад  Вперед