2016-11-07 4 views
0

MSVC++ обеспечивает оптимизацию для программистов, которые хотят развернуть только один исполняемый файл. Вы можете построить с помощью/MT, чтобы связать библиотеку времени выполнения C++ и стандартную библиотеку C++ с EXE; или/MD для вызова библиотек времени выполнения C++ (файлы .DLL).Как развернуть только один исполняемый файл

А поскольку для вашего собственного кода или для сторонних библиотек DLL существует возможность создания только одного исполняемого файла?

Предположим, проект PrjA использует PrjB; теперь PrjB генерирует только динамическую библиотеку PrjB.dll, а не статическую библиотеку PrjB.lib. Это способ настроить их так, чтобы PrjA мог генерировать PrjA.exe, в который встроен PrjB.dll, так что нужно развернуть только 1 файл?

Примечание: ограничение заключается в том, что предоставляется только PrjB.DLL, без статической библиотеки prjB.LIB. Этот вопрос отличается от C++ How to compile dll in a .exe.

MSVC /MD, /MT config using C++ Runtime Library:

  • /MD Вызывает приложение для использования многопоточной специфической и DLL конкретной версии библиотеки времени выполнения.

  • /MT Заставляет приложение использовать многопоточную статическую версию библиотеки времени выполнения.

+0

* Это способ настроить их для достижения аналогичного эффекта как/MD,/MDd,/MT,/MTd? * Пожалуйста, уточните. Мне непонятно, что вы не поняли после прочтения документации для этих флагов. –

+0

Похоже, вопрос заключается в «как статически связывать все мои проекты с одним исполняемым». Не знаю, какие настройки библиотеки времени выполнения имеют к этому отношение, но для связывания ваших проектов статически вам нужно изменить тип своих проектов из «динамической библиотеки» в «статическую библиотеку». –

+0

Ну, тогда ProjB сгенерирует .lib./MD// MT не делают файлы .dll в .exe, они просто выбирают между двумя версиями одной и той же библиотеки - один скомпилирован как .dll и один скомпилирован как .lib. Если вы действительно не можете сделать .lib, и вам действительно нужен одиночный .exe, тогда есть некоторые инструменты, которые могут «связывать» приложение с одним exe post factum - см. Другие вопросы для получения дополнительной информации. –

ответ

0

Как уже упоминалось в ряде других SOanswers, есть внешние инструменты, доступные для этой задачи. BoxedApp высоко ценится среди них (но оплачивается).

Смежные вопросы