Ошибка вида MSVCRT: unimplemented function или падение программы с упоминанием msvcrt.dll — типичный признак того, что приложению в Wine не хватает нужной версии библиотеки Wine C Runtime Library, либо встроенная реализация конфликтует с ожиданиями конкретной программы. Часто это проявляется при запуске старых игр, офисных пакетов или специализированного софта, собранного под определённую версию Visual C++.
Разберёмся, что представляет собой этот компонент, почему возникают сбои и как безопасно их устранить без переустановки всего префикса Wine. Инструкции ниже подходят для большинства дистрибутивов Linux, но точные названия пакетов могут отличаться — сверяйтесь с документацией вашей системы.
Что такое Wine C Runtime Library
Wine C Runtime Library — это реализация стандартной библиотеки времени выполнения языка C (CRT) внутри Wine. В Windows этот набор функций поставляется в виде библиотек msvcrt.dll и семейства MSVCR/MSVCP (например, msvcr100.dll, msvcp140.dll), которые устанавливаются пакетами Visual C++ Redistributable от Microsoft.
Wine включает собственную версию этих библиотек, чтобы Windows-программы могли работать без оригинальных файлов Microsoft. Однако встроенная реализация не всегда покрывает все функции конкретных версий CRT — отсюда и ошибки.
- 🧩 msvcrt.dll — базовая библиотека CRT, присутствует в Wine по умолчанию.
- 📦 msvcr80/90/100/120/140 — версии CRT для конкретных выпусков Visual Studio.
- ⚙️ ucrtbase.dll — универсальная CRT, используемая современными приложениями.
- 🔧 vcruntime140.dll и msvcp140.dll — часто требуются программам, собранным в Visual Studio 2015 и новее.
Типичные симптомы проблем с CRT в Wine
Распознать проблему с библиотекой времени выполнения можно по характерным сообщениям в терминале или в окне ошибки программы. Запустите приложение из консоли командой wine program.exe, чтобы увидеть диагностический вывод.
- ❌ Сообщение
err:module:import_dll Library msvcrXXX.dll not found— нужной DLL нет в префиксе. - ❌ Строка
fixme:msvcr:... unimplemented function— функция есть, но не реализована полностью. - ❌ Ошибка «Runtime Error» или аварийное завершение сразу после старта программы.
- ❌ Сбой при вызове конкретных функций: работа с файлами, локалью, математическими операциями.
Важно не путать эти ошибки с проблемами DirectX или драйверов: если в логе фигурируют именно файлы msvcr, msvcp, vcruntime или ucrtbase, дело почти наверняка в CRT.
Диагностика: как найти проблемную библиотеку
Прежде чем что-то устанавливать, определите, какая именно библиотека вызывает сбой. Самый надёжный способ — включить подробное логирование Wine:
WINEDEBUG=+loaddll wine program.exe 2>&1 | grep -i msvcr
Эта команда покажет, какие DLL загружаются и откуда — из встроенных компонентов Wine (builtin) или из нативных файлов Windows (native). Если программа пытается загрузить msvcr120.dll, а её нет в префиксе, вы сразу это увидите.
Дополнительно проверьте содержимое каталога ~/.wine/drive_c/windows/system32/ — там должны лежать установленные библиотеки. Отсутствие нужной версии подтверждает диагноз.
Установка нужных библиотек через Winetricks
Самый безопасный и распространённый способ закрыть потребность в конкретной версии CRT — установить официальные пакеты Visual C++ Redistributable через Winetricks. Утилита сама скачивает дистрибутивы Microsoft и корректно регистрирует библиотеки в префиксе.
winetricks vcrun2019
winetricks vcrun2013
winetricks vcrun2010
Выбирайте версию, соответствующую году сборки программы: vcrun2019 покрывает msvcp140/vcruntime140 для приложений Visual Studio 2015–2022, vcrun2013 — для msvcr120 и так далее. Если версия неизвестна, начните с самой свежей.
☑️ Порядок установки CRT через Winetricks
⚠️ Внимание: команды Winetricks применяются к префиксу, указанному в переменной
WINEPREFIX. Если пользуетесь несколькими префиксами (например, через Lutris или Bottles), убедитесь, что устанавливаете библиотеки именно в тот префикс, где лежит проблемная программа.
Настройка переопределения библиотек
Иногда нативная DLL установлена, но Wine продолжает использовать свою встроенную версию. Это исправляется через переопределение библиотек в утилите winecfg на вкладке «Библиотеки»: добавьте нужную DLL и задайте режим «сторонняя, затем встроенная» (native, builtin).
То же самое можно сделать из терминала без графического интерфейса:
wine reg add 'HKCU\Software\Wine\DllOverrides' /v msvcp140 /d native,builtin /f
Обратная ситуация тоже встречается: нативная библиотека конфликтует с программой, и помогает переключение на встроенную (builtin). Экспериментируйте с режимами по одной библиотеке, проверяя результат после каждого изменения.
Почему встроенная CRT иногда работает лучше нативной
Встроенные библиотеки Wine тесно интегрированы с остальными компонентами слоя совместимости. Нативные DLL от Microsoft могут вызывать функции Windows, которые Wine реализует не полностью, что приводит к новым ошибкам. Поэтому универсального правила «всегда native» нет — оптимальный режим подбирается для каждой программы.
Сравнение способов решения проблемы
| Метод | Когда применять | Сложность | Риски |
|---|---|---|---|
| Winetricks (vcrunXXXX) | DLL отсутствует в префиксе | Низкая | Минимальные |
| Переопределение в winecfg | Конфликт builtin/native версий | Низкая | Обратимо в один клик |
| Ручное копирование DLL | Экзотические версии библиотек | Средняя | Несовпадение разрядности |
| Новый чистый префикс | Множественные конфликты | Средняя | Нужно переустановить программы |
Разрядность префикса и частые ошибки
Отдельный источник проблем — несовпадение разрядности. 32-битная программа требует 32-битных версий CRT, и наоборот. Префикс Wine по умолчанию поддерживает оба типа (WoW64), но если вы создавали чисто 64-битный префикс через WINEARCH=win64, старые 32-битные приложения могут работать некорректно.
⚠️ Внимание: не копируйте DLL из установленной Windows или с посторонних сайтов вручную без крайней необходимости. Такие файлы могут не подходить по версии и разрядности, а загрузка библиотек из непроверенных источников — прямой риск для безопасности системы.
Если после всех манипуляций ошибки накапливаются и конфликтуют между собой, практичнее создать новый чистый префикс и установить программу заново вместе с нужными библиотеками — это часто быстрее, чем разбирать клубок переопределений.
Часто задаваемые вопросы
Что означает ошибка «msvcrXXX.dll not found» в Wine?
Программе нужна конкретная версия библиотеки Visual C++ Runtime, которой нет в текущем префиксе Wine. Решение — установить соответствующий пакет через winetricks vcrunXXXX, где XXXX — год версии Visual Studio.
Чем отличаются msvcr, msvcp и vcruntime?
msvcr — библиотека функций языка C, msvcp — библиотека стандартных классов C++, vcruntime — вспомогательный компонент времени выполнения. Приложениям часто нужны все три файла одной версии, поэтому Winetricks устанавливает их комплектом.
Можно ли обойтись без установки нативных библиотек Microsoft?
Иногда да: встроенные реализации Wine постоянно улучшаются, и многие программы работают на них без проблем. Если же в логе видны unimplemented function или сбои, без нативного пакета Redistributable обойтись не получится.
Почему после установки vcrun программа всё равно не запускается?
Проверьте режим библиотеки в winecfg — возможно, Wine использует встроенную версию вместо установленной. Также убедитесь, что библиотеки установлены в тот же префикс, где находится программа, и что разрядность приложения соответствует установленным DLL.
Нужно ли устанавливать все версии Visual C++ Redistributable сразу?
Не обязательно. Устанавливайте только те версии, которые требует конкретная программа — это видно из лога Wine. Лишние пакеты не навредят, но и пользы без запроса от приложения не принесут.