Что такое разделяемая библиотека?
Разделяемая библиотека - это файл, содержащий объектные модули, которые могут одновременно использоваться (разделяться) несколькими процессами. С точки зрения организации как обычная (неразделяемая), так и разделяемая библиотеки являются архивами. Далее, однако, термины архивная библиотека или архив будут использоваться только в неразделяемом случае.
Если при редактировании внешних связей программы используется разделяемая библиотека, то библиотечные модули, соответствующие внешним ссылкам программы, не копируются в выполняемый объектный файл. Вместо этого в объектном файле создается специальная секция .lib, содержащая ссылки на библиотеку. Когда ОС UNIX выполняет получившийся файл, информация из этой секции используется для включения соответствующей библиотеки в адресное пространство процесса.
Тот факт, что содержимое разделяемых библиотек не копируется в выполняемый файл, дает следующие преимущества:
- Экономится дисковое пространство.
- Выполняемые файлы имеют меньший размер.
- Экономится оперативная память.
- За счет совместного использования несколькими процессами одной разделяемой библиотеки уменьшается суммарный размер нужной им оперативной памяти.
- Упрощается сопровождение выполняемых файлов.
- Как было указано, содержимое разделяемой библиотеки помещается в адресное пространство процесса на этапе выполнения. Таким образом, внесение изменений в разделяемую библиотеку фактически изменяет все использующие ее выполняемые файлы, поскольку операционная система предоставит процессам новое содержимое библиотеки. После исправления ошибки в разделяемой библиотеке все процессы автоматически будут использовать скорректированные модули.
- Разумеется, архивные библиотеки не обладают этим свойством: изменения в архиве не приводят к изменению выполняемых файлов, так как архивные модули копируется в них не во время выполнения, а на этапе редактирования связей.
Более подробно свойства разделяемых библиотек описываются далее, в разделе Использовать ли разделяемую библиотеку?.