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

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

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

• Linux разделяет используемую для кода исполняемого файла память между всеми процессами, которые совместно пользуются библиотекой. Таким образом, если запущено несколько программ, которые работают с одним и тем же кодом, в ваших интересах и для удобства пользователя будет поместить код в совместно используемую библиотеку.

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

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

• При обнаружении ошибки совместно используемую библиотеку можно заменить исправленной версией, а не компилировать повторно каждую программу, ее использующую.

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

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

Теперь стандартный формат двоичного файла практически на каждой платформе Linux представляет собой современный, расширяемый файловый формат ELF (Executable and Linking Format — формат исполняемых и компонуемых модулей), описанный в [24], ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ELF.doc.tar.g и ftp://tsx-11.mit.edu/pub/linux/packages/GCC/elf.ps.gz. Это значит, что практически на всех платформах Linux шаги, предпринимаемые для создания и использования разделяемых библиотек, совершенно одинаковы.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Глава 11 Использование служб SharePoint совместно с Outlook 2007

Из книги Microsoft Windows SharePoint Services 3.0. Русская версия. Главы 9-16 автора Лондер Ольга

Глава 11 Использование служб SharePoint совместно с Outlook 2007 В этой главе вы научитесь:• подключать список SharePoint к Microsoft Office Outlook 2007;• перемещать контакты из Office Outlook 2007 в список SharePoint;• копировать контакты SharePoint в Outlook 2007;• отправлять сообщения электронной почты, используя


Просмотр календарей SharePoint совместно с персональными календарями

Из книги Стандарты программирования на С++. 101 правило и рекомендация автора Александреску Андрей

Просмотр календарей SharePoint совместно с персональными календарями Используя Outlook 2007, можно работать с несколькими календарями, что позволяет создавать календари для определенных целей, например один для работы, а другой для домашней жизни. При помощи Outlook 2007 можно


Глава 14 Использование служб SharePoint совместно с InfoPath 2007

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Глава 14 Использование служб SharePoint совместно с InfoPath 2007 В этой главе вы научитесь:• создавать библиотеку форм при помощи Microsoft Office InfoPath 2007;• изменять существующую библиотеку форм;• заполнять форму;• изменять существующую форму;• создавать тип содержимого при помощи Office


10. Минимизируйте глобальные и совместно используемые данные

Из книги C++. Сборник рецептов автора Диггинс Кристофер

10. Минимизируйте глобальные и совместно используемые данные РезюмеСовместное использование вызывает споры и раздоры. Избегайте совместного использования данных, в особенности глобальных данных. Совместно используемые данные усиливают связность, что приводит к


8.3. Разработка совместно используемых библиотек

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

8.3. Разработка совместно используемых библиотек Создание совместно используемых библиотек не намного труднее разработки обычных статических библиотек. Существует лишь несколько ограничений, но с ними очень легко справиться. Однако совместно используемым библиотекам


8.4. Сборка совместно используемых библиотек

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

8.4. Сборка совместно используемых библиотек Если вы разобрались с концепцией имен soname, все остальное просто. Достаточно следовать нескольким несложным правилам, которые перечислены ниже.• Собирайте свой исходный код с указанием флага -fPIC для gcc. В результате


8.5. Инсталляция совместно используемых библиотек

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

8.5. Инсталляция совместно используемых библиотек Программа ldconfig выполняет всю рутинную работу по инсталляции совместно используемых библиотек. Вам всего лишь нужно получить файлы и запустить ldconfig. Выполните описанные ниже шаги.1. Скопируйте совместно используемую


8.6. Работа с совместно используемыми библиотеками

Из книги Разработка ядра Linux автора Лав Роберт

8.6. Работа с совместно используемыми библиотеками Самый легкий способ работы с совместно используемыми библиотеками — игнорировать тот факт, что она совместная. Компилятор С автоматически задействует совместно используемые библиотеки вместо статических, если ему явно


Использование FIBPIus совместно с генератором отчетов FastReport

Из книги автора

Использование FIBPIus совместно с генератором отчетов FastReport Фактически компоненты FIBPIus совместимы с любыми генераторами отчетов, которые работают с потомками стандартного класса TDataSet. Таким образом, вы сможете использовать FIBPIus вместе с QuickReport, ReportBuilder, FastReport и даже со


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

Из книги автора

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


5.1. Совместно используемая память

Из книги автора

5.1. Совместно используемая память Простейшим способом взаимодействия процессов является совместный доступ к общей области памяти. Это выглядит так, как если бы два или более процесса вызвали функцию malloc() и получили указатели на один и тот же блок памяти. Когда один из


5.1.5. Контроль и освобождение совместно используемой памяти

Из книги автора

5.1.5. Контроль и освобождение совместно используемой памяти Функция shmctl() возвращает информацию о совместно используемом сегменте и способна модифицировать его. Первым параметром является идентификатор сегмента.Чтобы получить информацию о сегменте, укажите в качестве


18.5.3. Использование команды ls совместно с циклом for

Из книги автора

18.5.3. Использование команды ls совместно с циклом for Этот цикл оценивает команду ls интерпретатора shell и отображает сведения о файлах текущего каталога.$ pg forls#!/bin/sh# forlsfor loop in `ls` doecho $LOOP done$


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

Из книги автора

Совместно используемые обработчики Совместно используемые (shared) обработчики выполняются практически так же, как и не совместно используемые. Существует, однако, три главных отличия.• Флаг SA_SHIRQ должен быть установлен в параметре flags при вызове функции