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

StackOverflow https://stackoverflow.com/questions/3230

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

  1. Выберите Проект -> Свойства
  2. Выберите Конфигурация -> Общие
  3. В поле "Как вы должны связать MFC" выберите "статически связать его".
  4. Выберите Компоновщик -> Ввод.Под Дополнительные зависимости, добавьте любые библиотеки, с которыми ваше приложение должно статически связываться.

Другие советы

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top