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

     

Рекомендации по разработке исходного текста для разделяемой библиотеки


Главным преимуществом разделяемой библиотеки перед архивной является экономия памяти за счет ее разделенного использования. Следующие далее рекомендации имеют целью помочь Вам добиться такой экономии, а также решить проблему открытости, то есть возможности создания следующих версий библиотеки, совместимых с ее предыдущими версиями. Здесь совместимость означает возможность выполнения с новой версией программ, создававшихся со старой версией библиотеки.

Рекомендации иллюстрируются примерами, заимствованными из опыта разработки разделяемой библиотеки языка C.

Советуем прежде всего прочитать последующий текст полностью, чтобы получить представление о том, что нужно помнить при создании разделяемой библиотеки; затем этот текст можно использовать в качестве справочника в процессе планирования и принятия решений при ее разработке.

Прежде чем перейти к самим рекомендациям, упомянем ограничения, существенно влияющие на разработку разделяемой библиотеки. Эти ограничения связаны со статическим редактированием связей, и некоторые из них ниже разъясняются подробнее. Пока же перечислим их:

  • Адреса экспортируемых (доступных для внешнего использования) имен фиксированы. Если какой-либо адрес изменится (будь то функции или переменной), Вам придется перередактировать все работающие с разделяемой библиотекой выполняемые файлы.
  • Если во время выполнения содержимое разделяемой библиотеки изменяется, оно изменяется для всех процессов. Поэтому все изменения, относящиеся лишь к одному процессу, должны касаться данных, а не команд, так как только область данных используется процессами индивидуально (кроме того, область команд доступна только для чтения).
  • Если библиотека использует какое-либо имя явно (то есть не через ссылку), его значение (то есть адрес) времени выполнения должно быть известно на стадии создания библиотеки.
  • Нельзя явно ссылаться на импортируемые имена. Их адреса на стадии создания библиотеки неизвестны, а во время выполнения могут оказаться различными для разных процессов. Такие имена следует использовать косвенно, через ссылку, находящуюся в области данных библиотеки.



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