Как вы собираете визуальный проект студии С++ для выпуска?
Мне интересно, как сделать сборку релиза, которая включает в себя все необходимые DLL файлы в .exe, чтобы программа могла быть запущена на машине без разработки, без необходимости установки распространяемого на целевой машине Microsoft.
Без этого вы получите сообщение об ошибке, что конфигурация приложения неверна и переустановлена.
Ответы
Ответ 1
- Выберите "Проект" → "Свойства"
- Выберите "Конфигурация" → "Общие"
- В поле для ссылки на MFC выберите статически ссылку.
- Выберите Linker → Input. В разделе Дополнительные зависимости добавьте любые библиотеки, в которые требуется приложение, для статической ссылки.
Ответ 2
Вам нужно установить библиотеку времени выполнения (в разделе C/С++ → Code Generation) для ВСЕХ проектов для статической привязки, которая коррелирует со следующими конфигурациями по умолчанию:
- Многопоточная отладка/выпуск
- Отладка/выпуск одной части
В отличие от "DLL" версий этих библиотек.
Даже если вы это сделаете, в зависимости от библиотек, которые вы используете, вам может потребоваться установить модуль слияния/фреймворк/etc. Это зависит от того, доступны ли статические версии LIB ваших зависимостей.
Ответ 3
Помните, что Microsoft не рекомендует статически связывать среду выполнения с вашим проектом, поскольку это предотвращает ее обслуживание при обновлении Windows для исправления критических ошибок безопасности. Существуют также потенциальные проблемы, если вы передаете память между вашими основными файлами .exe и .dll, как если бы каждая из этих статических ссылок в среде выполнения вы могли столкнуться с проблемами malloc/free mismatch.
Вы можете включить DLL с исполняемым файлом, не компилируя их в .exe и не запуская инструмент redist - это то, что я делаю, и, похоже, он работает нормально.
Единственная муха в мазене состоит в том, что вам нужно дважды включать файлы, если вы распространяете для широкого диапазона версий Windows: более новые ОС нуждаются в файлах в явно определенных каталогах, а более старые хотят, чтобы все файлы в каталог программы.
Ответ 4
Вы будете искать статическую ссылку (в отличие от динамической ссылки)
Я не уверен, сколько из распространенных распространяемых MS статических ссылок.
Ответ 5
Если вы хотите узнать, какая dll ваша целевая машина отсутствует, используйте файл depend.exe, который использовался с MSDev, но также можно найти здесь. Тестирование этого на нескольких целевых компьютерах должно указать вам, какую dll вам нужно упаковать с вашим приложением.