Какие библиотеки DLL я должен поставлять вместе с моим EXE, чтобы использовать Windows 10 Universal CRT?

Я использовал Visual Studio 2015 для компиляции C-программы в 32-битный EXE, который динамически связывается с CRT. Я хочу разрешить пользователям загружать и запускать этот EXE-файл без необходимости запуска VCRedist бинарный первый. Поэтому кажется, что мне нужно развернуть некоторые библиотеки DLL "локально".

Предположим, что на компьютере пользователя установлен универсальный CRT (т. Е. Установлена ​​Windows 10 или более ранняя версия, включающая соответствующий Центр обновления Windows).

Это необходимо и достаточно только для отправки C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT\vcruntime140.dll рядом с моим EXE?

Будет ли ситуация точно такой же, если я использую Visual Studio 2017?

2 ответа

Если вы хотите избежать запуска VCRedist в целевой системе, вы должны распределить ВСЕ dll внутри следующих двух каталогов вместе с вашим.exe

Первый:

(VS2015) C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT  
(VS2017) C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.15.26706\x86\Microsoft.VC141.CRT 

второй

C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x86

При компиляции 64-битного приложения замените "x86" на "x64" в каталогах.

Вы, вероятно, хотите связать свои зависимости статически.

Шаги для достижения этого в Visual Studio:

  1. открыто Project Properties
  2. Выбрать C/C++
  3. Выбрать Code Generation
  4. За Runtime Library, Выбрать Multi-threaded (/MT)

Это будет работать на всех последних версиях Visual Studio. Полученный EXE должен быть автономным.

Другие вопросы по тегам