Как вы упаковываете проект Visual Studio C++ для выпуска?

Мне интересно, как сделать сборку выпуска, которая включает в себя все необходимые файлы DLL в .exe, чтобы программу можно было запускать на машине, не предназначенной для разработки, без необходимости установки распространяемого пакета Microsoft на целевую машину.

Если этого не сделать, вы получите сообщение об ошибке, что конфигурация приложения неправильная, и ее необходимо переустановить.

Ответов (6)

Решение
  1. Выберите Project -> Properties
  2. Выберите Конфигурация -> Общие.
  3. В поле, указывающем, как вы должны связать MFC, выберите статическое связывание.
  4. Выберите Linker -> Input. В разделе « Дополнительные зависимости» добавьте любые библиотеки, с которыми ваше приложение должно статически связывать.

Вы будете искать статическую ссылку (в отличие от динамической ссылки)

Я не уверен, сколько распространяемых файлов MS статически связаны.

Вам следует использовать статическую ссылку и добавить все необходимые библиотеки в дополнительных зависимостях.

Вам необходимо настроить библиотеку времени выполнения (в C/C++ -> Code Generation) для ВСЕХ проектов на статическую привязку, которая соответствует следующим конфигурациям сборки по умолчанию:

  • Многопоточная отладка / выпуск
  • Однопоточная отладка / выпуск

В отличие от "DLL" версий этих библиотек.

Даже если вы это сделаете, в зависимости от используемых вами библиотек вам, возможно, придется установить модуль слияния / framework / и т. Д. Это зависит от того, доступны ли статические LIB-версии ваших зависимостей.

Если вы хотите узнать, какая dll отсутствует на вашем целевом компьютере, воспользуйтесь зависимостью .exe, которая раньше поставлялась с MSDev, но ее также можно найти здесь . Тестирование этого на нескольких целевых машинах должно сказать вам, какие библиотеки DLL вам нужно упаковать с вашим приложением.

Имейте в виду, что Microsoft не рекомендует статически связывать среду выполнения с вашим проектом , так как это не позволяет ей обслуживаться обновлением Windows для исправления критических ошибок безопасности. Существуют также потенциальные проблемы, если вы передаете память между вашими основными файлами .exe и .dll, как если бы каждый из этих статических связывает среду выполнения, вы можете столкнуться с проблемами несоответствия malloc / free.

Вы можете включать библиотеки DLL в исполняемый файл, не компилируя их в .exe и не запуская инструмент redist - это то, что я делаю, и, похоже, он работает нормально.

Единственная ложка дегтя заключается в том, что вам нужно дважды включать файлы, если вы распространяете для широкого диапазона версий Windows - более новым ОС нужны файлы в каталогах, определенных в манифесте, а более старым - все файлы в каталоге программы. .