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

       

Что такое разделяемая библиотека?


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

Если при редактировании внешних связей программы используется разделяемая библиотека, то библиотечные модули, соответствующие внешним ссылкам программы, не копируются в выполняемый объектный файл. Вместо этого в объектном файле создается специальная секция .lib, содержащая ссылки на библиотеку. Когда ОС UNIX выполняет получившийся файл, информация из этой секции используется для включения соответствующей библиотеки в адресное пространство процесса.

Тот факт, что содержимое разделяемых библиотек не копируется в выполняемый файл, дает следующие преимущества:

  • Экономится дисковое пространство.
  • Выполняемые файлы имеют меньший размер.
  • Экономится оперативная память.
  • За счет совместного использования несколькими процессами одной разделяемой библиотеки уменьшается суммарный размер нужной им оперативной памяти.
  • Упрощается сопровождение выполняемых файлов.
  • Как было указано, содержимое разделяемой библиотеки помещается в адресное пространство процесса на этапе выполнения. Таким образом, внесение изменений в разделяемую библиотеку фактически изменяет все использующие ее выполняемые файлы, поскольку операционная система предоставит процессам новое содержимое библиотеки. После исправления ошибки в разделяемой библиотеке все процессы автоматически будут использовать скорректированные модули.
  • Разумеется, архивные библиотеки не обладают этим свойством: изменения в архиве не приводят к изменению выполняемых файлов, так как архивные модули копируется в них не во время выполнения, а на этапе редактирования связей.

Более подробно свойства разделяемых библиотек описываются далее, в разделе Использовать ли разделяемую библиотеку?.



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