Комп’ютерні програми стають все розумнішими і все більше схожими на людей. Не дивно, що в якийсь момент їм теж знадобилися бібліотеки. Тоді і з’явилася перша DLL. Dynamic Link Library – клієнтська бібліотека.
Що зберігається в DLL?
Програма – це спосіб обробки інформації. При цьому часто доводиться здійснювати одні й ті ж дії. Такі дії в програмуванні називаються процедурами і функціями. Припустимо, програмі треба 100 разів перемножити одне число на інше. Вона буде звертатися до відповідної функції всередині неї до тих пір, поки не виконає всі дії.
Але програм, яким потрібна операція множення, безліч. І до появи DLL кожна з них містила в собі одну і ту ж функцію. Фізично вона являє собою кілька рядків у програмі. Кожен символ — один байт. Він завантажується в пам’ять комп’ютера. А пам’ять не безмежна.
Програмісти швидко зметикували, що можна такі функції помістити в одну програму. А кому треба, нехай звертаються до неї. Так з’явилася DLL. Це бібліотека, в якій замість книг зберігаються загальні функції.
Що таке файли DLL?
Комп’ютер знає тільки один спосіб зберігати інформацію. Він записує її у вигляді файлів. DLL не уникла загальної долі. Вона зберігається у вигляді файлів window.dll.
Це означає, що в операційній системі Windows, файли бібліотек складаються з назви та розширення, розділених крапкою. Наприклад: msvcp120.dll. Назва файла може бути будь-яким, а розширення завжди dll.
Зберігаються вони в системній папці Windows, “system32”. Тому будь-яка програма “знає”, куди звертатися, щоб отримати потрібну функцію. Якщо бібліотека потрібна тільки одного виконуваного файлу, вона може знаходитися в іншому місці.
Як це працює?
До складу виконуваного файлу включена так звана таблиця імпорту. Вона містить відомості про те, які бібліотеки і функції знадобляться для роботи.
Коли запускається програма, система зчитує з таблиці імпорту цю інформацію. Потім вона завантажує в пам’ять потрібні dll. Необхідні функції копіюються в адресний простір виконуваного файлу. Після цього бібліотека вивантажується з пам’яті і звільняє її для інших завдань.
Ці відомості вже достатньо для розуміння, що таке файли DLL. В реальності все набагато складніше.
Динамічно підключається пекло
Все було б добре, якби не прагнення до досконалості. Програми стають коротшими, пам’ять використовується краще, швидкість зростає на очах. Але хочеться ще коротше, краще, швидше.
Тому з’являються нові версії старих бібліотек. Тут і виникає те, що позначається терміном “DLL hell”, “Dll пекло” по-нашому. Цілком собі офіційний термін. Передбачити коли пекло разверзнет свої ворота неможливо.
Найчастіше це відбувається так: тільки вчора все працювало як годинник, а сьогодні то одна, то інша програма викидає повідомлення про те, що якась бібліотека не годиться, треба її повторно. Якщо знати, що таке файл DLL, на який посилається повідомлення, його можна пошукати і… Він знайдеться. Там, де і має бути.
Тут саме час згадати, що нещодавно був викачаний якийсь софт. Встановився нормально і працює без нарікань. Найчастіше причина незрозумілих збоїв криється саме в цьому. Пояснення просте: програма встановила нову версію dll. Вона несумісна зі старою.
Вихід є – це “вхід зсередини”
Можна взяти і встановити стару версію. Тоді перестане працювати вчорашня інсталяція. Чим пожертвувати? Нічим.
Можна використовувати обидві версії. Одну покласти в “Windowssystem32”, іншу разом з програмою. Коли система починає шукати файл спочатку вона шукає його в папці з виконуваним файлом. Не знайде, буде шукати в системній. Головне – не переплутати, що десь має лежати. Цей спосіб називається “перенаправлення”.
Вихід з пекла знайдений? Так. Але залишилися дрібні неприємності. Бувають і інші помилки файлу dll. Він може просто відсутніми. Хто винен – питання друге. Перший: що робити?
Знайти і встановити
Що таке файл msvcp120 dll, знає не кожен. Але кому “пощастило” побачить:
Знає, що таке файл DLL зрозуміє, що це бібліотека. Де вона лежить – відомо. Чому для прикладу обрано саме цей файл? Тому що він зустрічається частіше за інших. Це важливий системний файл, який використовують дуже багато програм. Існує 2 способи виправити помилку:
- перевстановити програму, якій потрібен цей файл;
- встановити бібліотеку вручну.
При перевстановлення програми вона сама завантажить і встановить dll.
Установка вручну передбачає кілька кроків:
- завантажити файл з інтернету;
- покласти його в потрібну папку;
- зареєструвати бібліотеку;
- перезавантажити комп’ютер.
Так само треба чинити з будь-яким іншим dll файл.
Смачне на третє
Жахливий кошмар DLL hell мотивував програмістів Microsoft на створення платформи NET Framework. Вони вірять, що Dll hell був останнім колом рукотворного пекла і нова платформа призведе прямо в рай. Теж рукотворний.