Динамически подключаемая библиотека

(перенаправлено с «DLL»)

DLL (англ. Dynamic Link Library — «библиотека динамической компоновки», «динамически подключаемая библиотека») в операционных системах Microsoft Windows и IBM OS/2 — динамическая библиотека, в которой программы могут хранить функции, переменные и т. д. Эти библиотеки обычно имеют расширение DLL, OCX (для библиотек содержащих ActiveX), или DRV (для ряда системных драйверов). Формат файлов для DLL такой же, как для EXE-файлов Windows, то есть Portable Executable (PE) для 32-битных и 64-битных приложений Windows и New Executable (NE) — для 16-битных. Так же, как EXE, DLL могут содержать секции кода, данных и ресурсов. В системах Unix аналогичные функции выполняют так называемые общие объекты (англ. shared objects).

Файлы данных с тем же форматом как у DLL, но отличающиеся расширением или содержащие только секцию ресурсов, могут быть названы ресурсными DLL. В качестве примера можно назвать библиотеки значков, иногда имеющие расширение ICL, и файлы шрифтов, имеющих расширение FON и FOT.

НазначениеПравить

Первоначально предполагалось, что введение DLL позволит эффективно организовать память и дисковое пространство, используя только один экземпляр библиотечного модуля для различных приложений. Это было особенно важно для ранних версий Microsoft Windows с жёсткими ограничениями по памяти.

Далее предполагалось улучшить эффективность разработок и использования системных средств за счёт модульности. Замена DLL-программ с одной версии на другую должна была позволить независимо наращивать систему, не затрагивая приложений. Кроме того, динамические библиотеки могли использоваться разнотипными приложениями — например, Microsoft Office, Microsoft Visual Studio и т. п.

В дальнейшем идея модульности выросла в концепции Component Object Model и System Object Model.

Фактически полных преимуществ от внедрения динамически подключаемых библиотек получить не удалось по причине явления, называемого DLL hell («DLL-ад»). DLL hell возникает, когда несколько приложений требуют одновременно различные, не полностью совместимые версии библиотек, что приводит к сбоям в этих приложениях и к конфликтам, резко снижая общую надёжность операционных систем. Поздние версии Microsoft Windows стали разрешать параллельное использование разных версий DLL (технология Side-by-side assembly), что свело на нет преимущества изначального принципа модульности.

Существует также ряд утилит, которые позволяют отслеживать зависимости приложений от подключаемых DLL. К примеру, see_dll из комплекта Microsoft Visual Studio.

СсылкиПравить