Що таке файли DLL і як вони працюють?


224

Як саме працюють файли DLL? Здається, їх дуже багато, але я не знаю, що вони є, або як вони працюють.

Отже, у чому справа з ними?


6
Оскільки це позначено лише для Windows, і це питання було написане ще в 2008 році, варто згадати, що в даний час dll працює і на Mac, і Linux з .NET Core.
Джим Ахо

Відповіді:


287

Що таке DLL?

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

DLL настільки схожі на EXE, що сам формат файлу той самий. І EXE, і DLL засновані на форматі файлу портативного виконавчого файла (PE). DLL також можуть містити компоненти COM та бібліотеки .NET.

Що містить DLL?

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

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

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

Детальніше про статичні та динамічні бібліотеки:

Зазвичай ви не бачите статичних бібліотек, хоча на своєму комп’ютері, оскільки статична бібліотека вбудована безпосередньо всередину модуля (EXE або DLL). Динамічна бібліотека - це окремий файл.

DLL можна змінити в будь-який час і завантажується лише під час виконання, коли EXE явно завантажує DLL. Статичну бібліотеку неможливо змінити після її складання в межах EXE. DLL можна оновлювати окремо без оновлення EXE.

Завантаження DLL:

Програма завантажує DLL при запуску, через LoadLibrary API323232323232323232323232323232323232, або через Win32 API LoadLibrary, або коли це залежність від іншої DLL. Програма використовує GetProcAddress для завантаження функції або LoadResource для завантаження ресурсу.

Подальше читання:

Будь ласка, перевірте MSDN або Wikipedia для подальшого читання. Також джерела цієї відповіді.


5
Мабуть, мабуть, десь згадується імпортна ліб. Гаразд я зараз поїду. :)
Адам Міц

2
Видалено ті, які, здається, вирішуються. Як я можу отримати бали за це? <g>
Адам Міц

36

Що таке DLL?

Файли DLL - це двійкові файли, які можуть містити виконуваний код та ресурси, такі як зображення тощо. На відміну від програм, їх не можна безпосередньо виконувати, але програма завантажує їх як і коли вони потрібні (або всі відразу під час запуску).

Вони важливі?

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

Для DLL-файлів можуть знадобитися інші файли DLL

Таким же чином, як для програми потрібен файл DLL, файл DLL може залежати від інших самих файлів DLL. Якщо один із цих файлів DLL у ланцюзі залежностей не знайдений, програма не завантажиться. Це легко налагоджується за допомогою будь-яких інструментів прогулянкової залежності, таких як Уокер залежності .

Їх так багато в системних папках

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

Встановлені програми також використовують файли DLL

Файли DLL також стають формою поділу функціональних можливостей фізично, як пояснено вище. Хороші програми також намагаються не завантажувати файли DLL до тих пір, поки вони не стануть абсолютно необхідними, що зменшує потреби в пам'яті. Це також спричиняє доставку програм з великою кількістю файлів DLL.

DLL Пекло

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

Як ми можемо знати, що знаходиться у файлі DLL?

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

Як ми їх створюємо / використовуємо?

Перегляньте програмну документацію у вашого постачальника. Для C ++ див. LoadLibrary в MSDN.


2
Будь ласка, доповніть це речення ( "The .NET platform might not face this issue at all.") причиною. Дякую.
Jogi

1
@RehanKhan Починаючи з .NET Framework v2.0, час виконання буде завантажувати лише збірки, складені з версією .NET <= завантажений в даний час час виконання. буде використовувати вже завантажену збірку. Загалом, я думаю, що краще сказати, що вони вирішили проблему, застосувавши дуже жорсткі обмеження щодо завантаження програм DLL (перед тим, як вона просто здасться і попросить вашої допомоги).
Владислав Мартін

14

Скажімо, ви створюєте виконуваний файл, який використовує деякі функції, знайдені в бібліотеці.

Якщо бібліотека, яку ви використовуєте, статична , лінкер скопіює об'єктний код цих функцій безпосередньо з бібліотеки та вставить їх у виконуваний файл.

Тепер, якщо цей виконуваний файл працює, у ньому є все, що потрібно, тому виконуваний завантажувач просто завантажує його в пам'ять і запускає.

Якщо бібліотека динамічна, лінкер не вставить об'єктний код, а скоріше, він вставить заглушку, яка в основному говорить, що ця функція розташована в цій DLL в цьому місці.

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

Щоб побачити це в дії, видаліть або перейменуйте DLL і подивіться, як завантажувач повідомить про відсутню помилку DLL при спробі запуску виконуваного файлу.

Звідси і назва Бібліотека динамічних посилань , частину процесу зв’язування виконується динамічно під час виконання виконуваним завантажувачем.

Останнє зауваження, якщо ви не посилаєтесь на DLL, то лінкер не вставить заглушки, але Windows все ще надає API GetProcAddress, який дозволяє завантажувати точку введення функції DLL задовго після запуску виконуваного файлу.


12

DLL (бібліотеки динамічних посилань) та SL (спільні бібліотеки, еквівалентні UNIX) - це лише бібліотеки виконуваного коду, які можуть бути динамічно пов'язані у виконуваний файл під час завантаження.

Статичні бібліотеки вставляються у виконуваний файл під час компіляції та фіксуються з цієї точки. Вони збільшують розмір виконуваного файлу і не можуть ділитися ними.

Динамічні бібліотеки мають такі переваги:

1 / Вони завантажуються на час запуску, а не на час компіляції, щоб їх можна було оновлювати незалежно від виконуваного файлу (всі ті вигадливі вікна та діалогові вікна, які ви бачите в Windows, надходять із DLL-файлів, тому зовнішній вигляд вашої програми може змінюватися без вас треба переписати його).

2 / Оскільки вони незалежні, код можна ділити на декілька виконуваних файлів - це економить пам’ять, оскільки, якщо ви працюєте зі 100 додатками з однією DLL, у пам'яті може бути лише одна копія DLL.

Основним їх недоліком є ​​перевага №1 - неможливість зміни незалежних DLL вашої програми може призвести до того, що ваша програма перестане працювати або почати вести себе химерно. Версія DLL, як правило, не дуже добре керується в Windows, і це призводить до химерно назви "DLL Пекло".


11

Файли DLL містять таблицю експорту, що представляє собою список символів, які можна переглянути програмою, що викликає. Символи, як правило, функціонують із умовою C виклику ( __stcall) ). Таблиця експорту також містить адресу функції.

За допомогою цієї інформації виклична програма може потім викликати функції в DLL, навіть якщо вона не мала доступу до DLL під час компіляції.

Представляючи Бібліотеки динамічних посилань, є ще трохи інформації.


6

http://support.microsoft.com/kb/815065

DLL - це бібліотека, яка містить код і дані, які можуть використовуватись більш ніж однією програмою одночасно. Наприклад, в операційних системах Windows DLL Comdlg32 виконує загальні функції, пов'язані з діалоговим вікном. Тому кожна програма може використовувати функціонал, який міститься в цій DLL, для реалізації діалогового вікна "Відкрити". Це допомагає сприяти повторному використанню коду та ефективному використанню пам'яті.

За допомогою DLL програму можна модулювати на окремі компоненти. Наприклад, програма обліку може продаватися за модулем. Кожен модуль може бути завантажений у основну програму під час виконання, якщо цей модуль встановлений. Оскільки модулі є окремими, час завантаження програми відбувається швидше, і модуль завантажується лише тоді, коли запитується ця функціональність.

Крім того, оновлення простіше застосувати до кожного модуля, не впливаючи на інші частини програми. Наприклад, у вас може бути програма нарахування заробітної плати, і ставки податку змінюються щороку. Коли ці зміни будуть ізольовані до DLL, ви можете застосувати оновлення, не потребуючи створення та установки всієї програми заново.

http://en.wikipedia.org/wiki/Dynamic-link_library


2

DLL - це розширення файлу, відомий як формат файлу "бібліотека динамічних посилань", який використовується для проведення декількох кодів та процедур для програм Windows. Програмне забезпечення та ігри працюють на базі файлів DLL; Файли DLL були створені так, що кілька додатків могли одночасно використовувати свою інформацію.

Якщо ви хочете отримати більше інформації про файли DLL або зіткнутися з будь-якою помилкою, прочитайте наступний пост. https://www.bouncegeek.com/fix-dll-errors-windows-586985/


1

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


3
Вони насправді можуть зберігати інтерфейс користувача і кілька програм роблять це. Наприклад, оснащення.
Брайан Р. Бонді,

1

За даними Microsoft

(DLL) Динамічні бібліотеки посилань - це файли, що містять дані, код або ресурси, необхідні для роботи програм. Це файли, які створюються екосистемою Windows і можуть обмінюватися між двома або більше програмами.

Коли програма або програмне забезпечення працює в Windows, багато від того, як працює програма, залежить від файлів DLL програми. Наприклад, якщо конкретна програма мала кілька модулів, то спосіб взаємодії кожного модуля визначається файлами DLL Windows.

Якщо ви хочете детального пояснення, перевірте ці корисні ресурси

Що таке файли DLL , про файли DLL

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.