Как вы упаковываете проект Visual Studio c ++ для выпуска?
-
08-06-2019 - |
Вопрос
Мне интересно, как создать релизную сборку, которая включает все необходимые dll-файлы в .exe, чтобы программу можно было запускать на компьютере, не предназначенном для разработки, без необходимости устанавливать распространяемый файл Microsoft на целевой компьютер.
Не сделав этого, вы получите сообщение об ошибке о неправильной конфигурации приложения и необходимости переустановки.
Решение
- Выберите Проект -> Свойства
- Выберите Конфигурация -> Общие
- В поле "Как вы должны связать MFC" выберите "статически связать его".
- Выберите Компоновщик -> Ввод.Под Дополнительные зависимости, добавьте любые библиотеки, с которыми ваше приложение должно статически связываться.
Другие советы
Вам необходимо установить для библиотеки времени выполнения (в разделе C / C ++ -> Генерация кода) для ВСЕХ проектов статическую привязку, которая соответствует следующим конфигурациям здания по умолчанию:
- Многопоточная Отладка / Выпуск
- Однопоточная Отладка / Выпуск
В отличие от "DLL"-версий этих библиотек.
Даже если вы это сделаете, в зависимости от используемых вами библиотек вам, возможно, придется установить модуль слияния / фреймворк / etc.Это зависит от того, доступны ли статические LIB-версии ваших зависимостей.
Имейте в виду , что Корпорация Майкрософт не рекомендует статически связывать среду выполнения с вашим проектом, поскольку это не позволяет ему обслуживаться центром обновления Windows для исправления критических ошибок безопасности.Существуют также потенциальные проблемы, если вы передаете память между вашими основными файлами .exe и .dll, как будто каждый из этих статических ссылок на среду выполнения, вы можете столкнуться с проблемами несоответствия malloc / free.
Вы можете включить библиотеки DLL в исполняемый файл, не компилируя их в .exe и не запуская инструмент redist - это то, что я делаю, и, кажется, это работает нормально.
Единственная ложка дегтя в бочке меда заключается в том, что вам нужно включать файлы дважды, если вы распространяете для широкого спектра версий Windows - более новым операционным системам нужны файлы в каталогах, определенных манифестом, а более старым - все файлы в каталоге программы.
Вы бы искали статическую ссылку (в отличие от динамической ссылки)
Я не уверен, сколько распространяемых файлов MS статически связаны между собой.
Если вы хотите узнать, какая библиотека DLL отсутствует на вашем целевом компьютере, используйте depends.exe которая раньше поставлялась с MSDev, но также может быть найдена здесь.Тестирование этого на нескольких целевых компьютерах должно подсказать вам, какие библиотеки DLL вам нужно упаковать с вашим приложением.