Статические и совместно используемые библиотеки в Linux

Объектная библиотека представляет собой файл, содержащий откомпилированный объектный код для (обычно логически связанных) наборов функций, которые могут быть вызваны из прикладных программ. Помещение кода для набора функций в единую объ­ектную библиотеку упрощает выполнение задач по созданию и сопровождению программ. Современные системы UNIX / Linux предоставляют два типа объектных библиотек: статические и совместно используемые библиотеки.

 

Статические библиотеки

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

После разрешения из основной программы различных ссылок на функции в модули статической библиотеки сборщик извлекает из библиотеки копии требуемых объектных модулей и копирует их в получаемый в результате исполняемый файл. Такая программа называется статически скомпонованной.

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

 

Совместно используемые библиотеки

Совместно используемые библиотеки были разработаны для решения проблем, связан­ных со статическими библиотеками.

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

 

Вас заинтересует / Intresting for you:

Основа операционной системы Li...
Основа операционной системы Li... 3055 просмотров Андрей Волков Wed, 09 Jan 2019, 05:36:45
Краткая история Linux
Краткая история Linux 2706 просмотров Андрей Волков Wed, 09 Jan 2019, 02:46:59
Сигналы в Linux: назначение и ...
Сигналы в Linux: назначение и ... 2066 просмотров Fortan Fri, 05 Nov 2021, 07:58:01
Процессы Linux
Процессы Linux 4582 просмотров Doctor Wed, 23 Jan 2019, 16:47:24
Войдите чтобы комментировать