Компьютерные программы становятся все умнее и все больше похожими на людей. Неудивительно, что в какой-то момент им тоже понадобились библиотеки. Тогда и появилась первая 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. Она несовместима со старой.
Выход есть - это "вход изнутри"
Можно взять и установить старую версию. Тогда перестанет работать вчерашняя инсталляция. Чем пожертвовать? Ничем.
Можно использовать обе версии. Одну положить в "Windows\system32\", другую вместе с программой. Когда система начинает искать файл, она сначала ищет его в папке с исполняемым файлом. Не найдет, будет искать в системной. Главное - не перепутать, что где должно лежать. Этот способ называется "перенаправление".
Выход из ада найден? Да. Но остались мелкие неприятности. Бывают и другие ошибки файла dll. Он может просто отсутствовать. Кто виноват - вопрос второй. Первый: что делать?
Найти и установить
Что такое файл msvcp120 dll, знает не каждый. Но кому "повезло" увидит:
Знающий, что такое файл DLL сообразит, что это библиотека. Где она лежит - известно. Почему для примера выбран именно этот файл? Потому что встречается он чаще других. Это важный системный файл, который используют очень многие программы. Существует 2 способа исправить ошибку:
- переустановить программу, которой нужен этот файл;
- установить библиотеку вручную.
При переустановке программы она сама скачает и установит dll.
Установка вручную предполагает несколько шагов:
- скачать файл из интернета;
- положить его в нужную папку;
- зарегистрировать библиотеку;
- перезагрузить компьютер.
Так же надо поступать с любым другим dll файлом.
Вкусное на третье
Ужасный кошмар DLL hell мотивировал программистов Microsoft на создание платформы NET Framework. Они верят, что Dll hell был последним кругом рукотворного ада и новая платформа приведет прямиком в рай. Тоже рукотворный.