Работа с библиотеками динамической компоновки (DLL). Цели введения DLL


Рад видеть вас на своём блоге!

Нашли у себя в компьютере DLL файлы и понятия не имеете, что это такое? Я поделюсь с вами информацией. Без них большинство программ и операционная система в целом не смогут функционировать. Хотите знать больше? Не пропустите мою статью.

Разъяснение

Данная аббревиатура расшифровывается как «Dynamic Link Library», а на нашем языке - «библиотека динамической компоновки» или чаще как «динамически подключаемая библиотека». Она по умолчанию устанавливается в ОС Windows, а раньше ещё и в IBM OS/2, пока она не прекратила своё существование. Библиотека предназначена для многократного использования различным программным обеспечением.

DLL содержит в себе важные сведения: о конфигурации системы, совместимости устройств, командах для их корректной работы и пр. Всё это хранится в файлах одноимённого расширения либо.drv для нескольких системных драйверов, .cpl - для файлов панели управления или в.ocx, если речь идёт о библиотеках содержащих фреймворк ActiveX.

Объекты.dll включают в себя коды и данные, которые могут использоваться одновременно несколькими программами. Своим содержимым они похожи на тип файлов EXE. Кстати, у них даже одинаковый формат: Portable Executable (PE) для 32-х и 64-х битных приложений Windows, и New Executable (NE) для 16-битных.

Многие устанавливаемые нами программы уже имеют в своём наборе такие файлы. В противном случае они пользуются теми, которые есть в операционке.

Динамические библиотеки на практике

В теории вроде бы всё ясно. Но чтобы понять суть предмета нашей беседы, необходимо увидеть его с практической стороны. Без него проги не могут работать, потому что не знают, как это делать.

Вот вам элементарный пример. Чтобы на чистом листе в Office Word начали появляться вводимые вами символы, нужны компоненты библиотеки, потому что сама по себе ОС не в курсе, что значит та или иная нажатая вами клавиша.

Даже когда вы просто включаете компьютер и ещё не успели ничего сделать, библиотека уже активно действует: показала вам время и дату, открыла программы в автозапуске, выстроила оформление рабочего стола, проштудировала сведения о конфигурации операционки и т. п. Вдобавок, как система общаться с мышью, клавиатурой, принтером и другим оборудованием, тоже объясняет ДЛЛ.

Преимущества DLL

Для чего предназначены динамические библиотеки? Они создавались для того, чтобы:

Ад для библиотек

В полной мере реализовать описанные выше преимущества всё-таки не удалось. Дело в том, что ПО может одновременно потребовать не полностью совместимые версии библиотек. Из-за этого случаются сбои в его работе. Вдобавок вследствие конфликтов снижается надёжность ОС в целом. Такое явление называется «DLL hell» (если кто не знает, то последнее слово переводится как «ад»).

Как это видит пользователь?

Предположим, вы никогда не обновляли на своём компьютере эти библиотеки и установили игру, выпущенную лет 5 назад. Она работает у вас нормально. Затем вы обнаружили, что недавно вышла последняя часть игры, и инсталлировали её тоже.

Однако вторая уже отказывается запускаться. Своё неповиновение она сопроводила сообщением, мол, ошибка DLL, отсутствует файл. Это значит, что имеющиеся на вашем компе компоненты, необходимые для её запуска, не работают или вовсе отсутствуют.

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

Решение

Чтобы подобные ситуации не всплывали, в последних поколениях Виндовс появилась технология Side-by-side assembly. Она позволяет использоваться параллельно разные версии библиотек. Правда, это нововведение идёт в разрез с принципом модульности, который изначально был преимуществом.

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

На этом всё.

Если вам станет что-то непонятно в компьютере или просто скучно, возвращайтесь. У меня всегда найдутся полезные статьи;)

Что такое DLL файлы, и для чего они нужны? Аббревиатура DLL – обозначает «Динамически Подключаемую Библиотеку». Она установлена, во всех операционных системах Windows, и практически каждая программа или игра на компьютере пользуется данной библиотекой. В ней содержится информация о конфигурации системы, совместимости устройств, наборе команд для правильной работы и многое другое. Некоторые файлы для игр имеют в своих папках уже готовые библиотеки, остальные пользуются системными.

Зачем нужны DLL компоненты

Если вкратце: что такое DLL файлы? – это компоненты библиотеки, а нужна она для запуска программ, приложений и игр. Компьютер включился, и система работает исправно. Вы еще ничего не запускали и не открывали, а уже десятки DLL файлов используются. Простые часы, информация о конфигурации системы, порядок запуска программ, оформление и многое другое используют библиотеку. Для того чтобы в текстовом документе начали появляться символы, соответствующие вашему вводу, нужна библиотека. По умолчанию система не знает, что означает нажатая вами клавиша,─ в этом его помогают компоненты DLL. Аналогичная ситуация со всеми подключаемыми устройствами: принтером, мышью, клавиатурой, флеш-картой. Именно библиотека DLL файлов «рассказывает» им, как работать с параметрами вашей системы.

Работоспособность элементов

Важно обновлять периодически систему и библиотеку, неактуальные файлы приведут к отказу работы программы. К примеру, вы установили игры пятилетней и большей давности, они у вас работают нормально. Далее вы поставили новую часть игры, которой не более года. Она может у вас не запуститься. Система выдаст следующее оповещение: ошибка DLL, отсутствует файл. Оно означает, что файлы нерабочие или вовсе его нет на компьютер. Связано это с тем, что программы или игры, которые пользуются библиотекой, могут вносить изменения. К примеру, вы установили игру, но параметры разрядности системы и версию ОС указали неверно.

Текущие файлы будут перезаписаны, и программа работать перестанет. Раз отсутствует DLL, значит, его нужно скачать и поместить в систему вручную. Но в большинстве случаев, новые игры требуют новых файлов, которых вообще не было в старых сборках системы, и решение одно - установить или обновить весь пакет.

У нас на сайте, Вы сможете скачать как отдельный DLL, так и весь пакет, в котором будут все файлы обновленные. Найти отсутствующий файл вы можете либо через поиск, либо по первой букве в верхнем меню. Как установить DLL файл и зарегистрировать прочтите в другой статье, где мы описали этот процесс максимально подробно.

DLL – аббревиатура от Dynamic Link Library («динамически подключаемая библиотека» с англ.). Динамическая библиотека ресурсов и подпрограмм позволяет использовать ранее написанные модули многократно. Файл-библиотека может включать в себя, например, процедуры, иконки. Необходима она для работы операционных систем Windows.

Библиотекой в программировании называется сборник программ, к которым можно обращаться при разработке ПО. Набор маленьких программ динамически включается в большую при вызове как составная часть. Преимущество DLL-файла в том, что он не занимает ОЗУ, а подгружается при необходимости во время работы (Run-time), что позволяет существенно экономить оперативную память. DLL-программа может работать с устройствами: принтером, сканером. При работе с текстом в MS Word нет необходимости в постоянном присутствии DLL-принтера. Если документ распечатывается, то MS Word обращается к динамической библиотеке и вызывает соответствующую DLL-программу для принтера.


Набор динамических подпрограмм может одновременно использоваться в нескольких работающих программах – это еще один плюс. Именно поэтому они еще носят название «библиотека общего пользования». Суть в том, что в ОЗУ загружается только одна копия динамической библиотеки, а обращаются к ней все активные в данный момент программы. Что тоже ведет к экономии ресурса ОЗУ. Кроме критически-необходимых подпрограмм в библиотеке DLL хранятся дополнительные функции. Их можно использовать как плагин (Plug-ins), умножая тем самым функциональность программы. Отсутствие нужного модуля в библиотеке DLL делает работу основной программы невозможной. Это отрицательное качество динамической библиотеки.


Файлы из динамической библиотеки имеют стандартное расширение в каждой операционной системе: в OS/2 и MS Windows – «.dll»; Mac OS - «.dylib»; UNIX – «.so». Хранятся такие файлы в определенном месте. Например, в «System32». Программист при написании приложения указывает имя нужной функции и имя библиотеки, в которой она находится. Сам код подпрограммы в исходном тексте не пишется, что существенно упрощает процесс программирования. Этот принцип основан на популярном ранее модульном кодинге. Простые программы оформлялись как отдельные модули, что позволяло не писать их каждый раз заново, а включать в код новой программы в готовом виде – откомпилированный модуль.


Кроме исполняемого кода процедур и функций в динамической библиотеке можно хранить графические и видео файлы. Их использование позволяет экономить не только ОЗУ, но и дисковое пространство. Многочисленные достоинства DLL библиотеки не уменьшает один недостаток – на загрузку модулей требуется дополнительное время. Преимущества же их очевидны, поэтому повсеместно используются программистами практически в каждой программе.


Будьте очень внимательны при работе: никогда не меняйте расширение «.dll» на иное, не переносите эти файлы в другую папку. Если файлу присвоить суффикс «.dll», то это не изменит его тип. Для конвертирования требуется специальное приложение. Чаще всего ошибки в работе Windows связаны именно с отсутствием нужного файла «.dll».

8 ответов

Что такое DLL?

Библиотеки динамических ссылок (DLL) похожи на EXE, но они не являются непосредственно исполняемыми. Они похожи на файлы.so в Linux/Unix. Другими словами, DLL - это реализация разделяемых библиотек MS.

DLL файлы похожи на EXE, что сам формат файла тот же. И EXE, и DLL основаны на формате Portable Executable (PE). DLL могут также содержать COM-компоненты и библиотеки.NET.

Что содержит DLL?

DLL содержит функции, классы, переменные, пользовательские интерфейсы и ресурсы (такие как значки, изображения, файлы,...), которые использует EXE или другая библиотека.

Типы библиотек:

Практически во всех операционных системах существует 2 типа библиотек. Статические библиотеки и динамические библиотеки. В Windows расширения файлов следующие: Статические библиотеки (.lib) и динамические библиотеки (.dll). Основное отличие состоит в том, что статические библиотеки связаны с исполняемым файлом во время компиляции; тогда как динамически связанные библиотеки не связаны до времени выполнения.

Подробнее о статических и динамических библиотеках:

Обычно вы не видите статические библиотеки, хотя на вашем компьютере, потому что статическая библиотека встроена непосредственно внутри модуля (EXE или DLL). Динамическая библиотека представляет собой автономный файл.

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

Программа загружает DLL при запуске через Win32 API LoadLibrary или когда это зависимость от другой DLL. Программа использует GetProcAddress для загрузки функции или LoadResource для загрузки ресурса.

Дальнейшее чтение:

Связанные вопросы


Похожие вопросы

Что такое DLL?

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

Насколько они важны?

Большинство приложений загружают файлы DLL, которые они требуют при запуске. Если какой-либо из них не найден, система вообще не сможет запустить процесс.

DLL файлы могут потребовать другие DLL файлы

Точно так же, как для приложения требуется DLL файл, DLL файл может зависеть от других файлов DLL. Если один из этих DLL файлов в цепочке зависимостей не найден, приложение не загружается. Это легко отлаживается с помощью любых инструментов зависимостей зависимостей, таких как Dependency Walker .

Их так много в системных папках

Большая часть функциональных возможностей системы представлена ​​пользовательской программе в виде файлов DLL, поскольку они являются стандартной формой совместного использования кода/ресурсов. Каждая функциональность хранится отдельно в разных DLL файлах, поэтому загружаются только необходимые файлы DLL и, следовательно, уменьшаются ограничения памяти в системе.

Установленные приложения также используют файлы DLL

DLL файлы также становятся формой разделения функций физически, как объяснялось выше. Хорошие приложения также пытаются не загружать файлы DLL, пока они не будут абсолютно необходимы, что уменьшит требования к памяти. Это также заставляет приложения отправлять много DLL файлов.

DLL Hell

Однако иногда обновления системы часто прерывают другие программы, когда существует несоответствие версии между совместно используемыми файлами DLL и требуемой программой. Системные контрольные точки и кеш-память DLL и т.д. Были инициативами M $для решения этой проблемы. Платформа.NET может не столкнуться с этой проблемой вообще.

Как мы узнаем, что внутри DLL файла?

Вы должны использовать внешний инструмент, например DUMPBIN или Dependency Walker, который не только покажет, какие публично видимые функции (известные как экспорт) внутри DLL файлов, а также какие другие DLL файлы, которые он требует, и которые экспортируют из этих DLL файлов, этот файл DLL зависит от.

Как мы их создаем/используем?

Обратитесь к документации по программному обеспечению от вашего поставщика. Для С++ обратитесь к LoadLibrary в MSDN.

Предположим, вы создаете исполняемый файл, который использует некоторые функции, найденные в библиотеке.

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

Теперь, если этот исполняемый файл запущен, он имеет все, что ему нужно, поэтому исполняемый загрузчик просто загружает его в память и запускает его.

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

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

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

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

Одно последнее замечание, если вы не подключаетесь к DLL, тогда никакие заглушки не будут вставлены компоновщиком, но Windows по-прежнему предоставляет API GetProcAddress , который позволяет загрузить выполнение DLL после того, как исполняемый файл запущен.

Файлы DLL содержат Таблица экспорта , которая представляет собой список символов, которые могут быть просмотрены вызывающей программой. Символы обычно являются функциями с конвенция вызова C (__ stcall). Таблица экспорта также содержит адрес функции.

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

DLL (библиотеки динамических ссылок) и SL (разделяемые библиотеки, эквивалентные в UNIX) - это просто библиотеки исполняемого кода, которые могут быть динамически связаны с исполняемым файлом во время загрузки.

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

Динамические библиотеки имеют следующие преимущества:

1/Они загружаются во время выполнения, а не компилируются, поэтому их можно обновлять независимо от исполняемого файла (все эти причудливые окна и диалоговые окна, которые вы видите в Windows, поступают из DLL, поэтому внешний вид вашего приложения может измените, не переписывая его).

2/Поскольку они независимы, код можно разделить на несколько исполняемых файлов - это экономит память, поскольку, если вы используете 100 приложений с одной DLL, в памяти может быть только одна копия DLL.

Их основным недостатком является преимущество # 1 - изменение библиотеки DLL независимо от приложения может привести к тому, что ваше приложение перестанет работать или начнет вести себя причудливо. Версии DLL, как правило, не очень хорошо управляются под Windows, и это приводит к причудливому названию "DLL Hell".

Сегодня расскажу о решении проблемы, которая часто возникает у пользователей. Ошибка связанная с отсутствием, какого либо, файла библиотеки dll. Эта ошибка появляется на вашем компьютере в случае если отсутствует в системе необходимый файл «динамических библиотек». Эти файлы необходимы для работы запускаемой программы, чаще это игра, которые выдают вам эту ошибку.

Из википедии:

DLL — «библиотека динамической компоновки», «динамически подключаемая библиотека», в операционных системах Microsoft Windows и IBM OS/2 — динамическая библиотека, позволяющая многократное использование различными программными приложениями. Эти библиотеки обычно имеют расширение DLL. Так же, как EXE, DLL могут содержать секции кода, данных и ресурсов.

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

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

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

Как правило отсутствие этого файла на вашем компьютере вызвано двумя причинами:

  1. Необходимая библиотека не устанавливалась.
  2. Необходимый файл был удален программой чистки вашего компьютера, от мусора или не нужных программ. Эти программы не всегда удаляют только мусор и не нужные файлы.

Человеческий фактор я не рассматриваю (действия совершенные по не знанию и т. п.)

Где взять эти библиотеки, файлы?

Как правило операционная система содержит в себе необходимые библиотеки, последние версии, этих файлов. Но многими программы используют не только обновленные версии но и старые. Бывает наоборот программе нужны только новые библиотеки, а система давно не обновлялась.

Вы подумали, что надо просто обновить систему? Нет решение этой проблемы совсем в другом.

Устраняем ошибки.

Отсутствующие файлы могут содержаться в двух библиотеках.

Как правило если это игра то вам необходимо обновить или до установить пакет средств разработки DirectX.

Если это программа, то обычно недостает файлов Microsoft Visual C++ (MSVC) — интегрированная среда разработки.

Но бывает необходимо установить или обновить оба компонента.

Обновив оба компонента вы решите не только существующую проблему но и предотвратите возвращение к этому вопросу в последующем.

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

С обновлением Microsoft Visual C++ все сложнее. Microsoft Visual C++ содержит несколько редакций, и в какой редакции находится недостающий у вас файл не известно.

Можно скачать необходимую редакцию на сайте Microsoft. Но это более трудоемкий процесс, надо скачивать несколько версий библиотек.







2024 © gtavrl.ru.