Мне интересно, как сделать сборку релиза, которая включает все необходимые dll файлы в .exe, чтобы программа могла быть запущена на машине, не предназначенной для разработки, без необходимости установки microsoft redistributable на целевой машине.
Без этого вы получаете сообщение об ошибке, что конфигурация приложения не верна и нужно переустановить.
Вам необходимо установить библиотеку времени выполнения (Under C/C++ -> Code Generation) для ВСЕХ проектов на статическое связывание, что соотносится со следующими конфигурациями сборки по умолчанию:
В отличие от "DLL" версий этих библиотек.
Даже если вы это сделаете, в зависимости от используемых библиотек вам, возможно, придется установить Merge Module/framework/etc. Это зависит от того, доступны ли статические LIB-версии ваших зависимостей.
Знайте, что Microsoft не рекомендует, что Вы статическая связь время выполнения в Ваш проект, поскольку это препятствует тому, чтобы он был обслужен обновлением окон, чтобы исправить критические ошибки безопасности. Есть также потенциальные проблемы, если Вы передаете память между своим главным .exe и .dll файлами, как будто каждая из этих статических связей время выполнения Вы можете закончить с проблемами несоответствия malloc/free.
Вы можете включать DLLs с исполняемым файлом, не собирая их в .exe и не управляя redist инструментом - это - то, что я делаю и это, кажется, хорошо работает.
Единственная ложка дегтя в бочке меда - то, что Вы должны включать файлы дважды если you' распределение ре для широкого спектра Версий для Windows - более новому OSs нужны файлы в определенных декларацией справочниках, и более старые хотят все файлы в справочнике программы.
Если вы хотите узнать, каких dll не хватает вашей целевой машине, используйте depends.exe, который раньше поставлялся с MSDev, но его также можно найти здесь. Протестировав его на нескольких целевых машинах, вы узнаете, какие dll вам нужно упаковать с вашим приложением.