Введение
Приложения редко реализуются как единственный модуль кода, потому что операционные системы реализуют большую часть потребности приложений функциональности в библиотеках. Для разработки приложений программисты соединяют свой пользовательский код против этих библиотек для получения основной функциональности, такой как возможность записать в стандартный вывод или нарисовать сложные изображения с помощью видеокарты. Однако соединение с библиотеками создает большую память исполняемых файлов и отходов. Один способ сократить размер файла и объем потребляемой памяти приложений состоит в том, чтобы сократить объем кода, загружающийся в запуске приложения. Динамические библиотеки удовлетворяют эту потребность; они могут быть загружены или во время запуска приложения или во время выполнения. Динамические библиотеки обеспечивают путь к приложениям для загрузки кода, когда он фактически необходим.
Для загрузки динамических библиотек во время выполнения приложения должны использовать ряд эффективных и переносимых функций, вызвал динамические функции совместимости загрузчика. Используя эти функции гарантирует, что динамические библиотеки загружаются самым эффективным способом, и упрощает портирование приложений от одной платформы до другого.
Этот документ предназначается для разработчиков динамических библиотек и разработчиков, пользующихся динамическими библиотеками в их приложениях. Необходимо быть знакомы с Mac OS, UNIX, Солярисом или Операционными системами Linux. Необходимо также быть опытным C, C++ или программистом Objective C.
Этот документ объясняет, как динамические библиотеки загружаются во время запуска приложения и как использовать функции DLC, dlopen
, dlsym
, dladdr
, dlclose
, и dlerror
, загрузить динамические библиотеки во время выполнения. Этот документ также обеспечивает инструкции для разработки динамических библиотек, которые будут использоваться клиентскими приложениями.
Этот документ не удовлетворяет потребности программистов Углерода или Какао, которые должны загрузить код, упакованный в платформе или пакете во время выполнения или тех, кто хочет изучить, как упаковать динамические библиотеки в платформы или пакеты. Руководство по программированию Платформы документов и Темы Программирования Загрузки Кода предоставляют информацию, адаптированную в частности в соответствии с разработчиками Углерода и Какао.
После чтения этого документа Вы поймете, как динамические библиотеки должны быть реализованы так, они могут использоваться эффективно клиентскими приложениями. Вы будете также знать, как использовать межплатформенные функции DLC для загрузки динамических библиотек во время выполнения.
Организация этого документа
Этот документ состоится следующими статьями:
Обзор Динамических Библиотек объясняет, что динамические библиотеки и как они используются приложениями. Это также обеспечивает обзор OS X динамический загрузчик и его межплатформенный интерфейс программирования.
Динамическое Руководство по проектированию Библиотеки объясняет, как назвать и экспортировать общедоступные символы так, чтобы они были просты в использовании клиентами и как реализовать статические инициализаторы и финализаторы. Эта статья также обеспечивает подсказки относительно того, как решить вопросы совместимости и зависимости. Наконец, эта статья перечисляет проблемы для рассмотрения при реализации динамической библиотеки с помощью C++ или Objective C.
Динамические Инструкции по Использованию Библиотеки показывают, как правильно загрузить и пользоваться динамическими библиотеками в приложениях или в других динамических библиотеках. Это также предоставляет определенную подробную информацию для того, чтобы пользоваться основанными на С++ библиотеками и библиотеками Objective-C–based.
Создание Динамических Библиотек демонстрирует, как разработать динамические библиотеки так, чтобы они были просты в использовании разработчиками, хотящими использовать в своих интересах их в их продуктах.
Пользование Динамическими Библиотеками описывает процесс установки и пользования динамическими библиотеками. Это также показывает, как вмешаться функции, экспортируемые динамической библиотекой.
Журналирование Динамических Событий Загрузчика объясняет, как включить динамическое журналирование загрузчика и идентифицирует события, которые могут быть зарегистрированы.
Зависимые от предшествующего пути развития выполнением Библиотеки описывают, как создать зависимые от предшествующего пути развития выполнением библиотеки и как использовать их в исполнимых программах.
См. также
Для дополнения информации, предоставленной в этом документе, консультируйтесь со следующими документами:
Инструкции по Производительности Размера кода фокусируются на методах, которые можно использовать для сокращения размера кода и памяти использования эффективно путем группировки кода в модули согласно функциональности.
“Выполнение Мужественных Файлов” в Мужественных Темах Программирования описывает процесс запуска приложения. В частности эта статья объясняет, как динамический загрузчик связывает импортированные символы и объясняет преимущества использования двухуровневого пространства имен вместо плоского пространства имен. Эта статья также объясняет различные классы памяти и атрибуты символа, которые можно использовать для управления видимостью экспортируемых символов динамической библиотеки.
“Загрузка Кода во Время выполнения” в Мужественных Темах Программирования объясняет, как упаковать динамическую библиотеку как платформу, обеспечивающую функции, такие как управление ресурсами и оптимизированная модель управления версиями.
Можно найти дополнительную информацию о динамических библиотеках в следующих документах:
Руководство по программированию платформы объясняет, как упаковать динамические библиотеки в платформы.
Портирование Приложений UNIX/Linux к OS X объясняет, как пользоваться динамическими библиотеками (плагины) для сокращения суммы специфичного для платформы кода в приложении.
Как Записать, что Совместно используемые Библиотеки (http://people .redhat.com/drepper/dsohowto.pdf) описывают очень подробно общие объекты Linux (динамические библиотеки) и обеспечивают инструкции по разработке и реализации API библиотеки и ABI, включая совместимость, производительность и проблемы безопасности.