如何仅部署单个可执行文件
Posted
技术标签:
【中文标题】如何仅部署单个可执行文件【英文标题】:How to deploy only a single executable file 【发布时间】:2016-11-07 04:46:23 【问题描述】:MSVC++ 为只想部署单个可执行文件的程序员提供了优化。可以用/MT构建,将C++运行时库和标准C++库链接到EXE中;或 /MD 调用 C++ 运行时库(.DLL 文件)。
但是对于您自己的代码或第三方 DLL,是否可以只生成一个可执行文件?
假设项目PrjA
使用PrjB
;现在,PrjB
只生成动态库PrjB.dll
,而不是静态库PrjB.lib
。有没有办法配置它们,以便PrjA
可以生成PrjA.exe
,其中嵌入了PrjB.dll
,因此只需要部署一个文件?
注意:约束是只提供PrjB.DLL
,没有提供静态库prjB.LIB
。这个问题和C++ How to compile dll in a .exe不同。
MSVC /MD, /MT config using C++ Runtime Library:
/MD 使应用程序使用多线程特定和 运行时库的特定于 DLL 的版本。
/MT 使应用程序使用运行时库的多线程静态版本。
【问题讨论】:
有没有办法配置它们以达到与 /MD、/MDd、/MT、/MTd 类似的效果? 请详细说明。在阅读了这些标志的文档后,我不清楚你不明白什么。 看起来问题是“如何将我的所有项目静态链接到单个可执行文件中”。不知道运行时库设置与此有关,但要静态链接您的项目,您需要将项目的类型从“动态库”更改为“静态库”。 那么,让 ProjB 生成 .lib。 /MD / /MT 开关不会使 .dll 文件进入 .exe,它们只是在同一个库的 2 个版本之间进行选择——一个编译为 .dll,一个编译为 .lib。如果你真的不能制作 .lib 并且你真的需要单个 .exe,那么有一些工具可以将应用程序“捆绑”到单个 exe 事后 - 有关更多详细信息,请参阅其他问题。 C++ How to compile dll in a .exe的可能重复 @AndreyTurkin 我知道将 prjB 编译为.LIB
是一种解决方案,但如果只有动态库prjB.DLL
可用,我正在寻找解决方案。
【参考方案1】:
正如在其他几个SOanswers 中提到的,有可用于此任务的外部工具。 BoxedApp 在其中备受推崇(但已付费)。
【讨论】:
以上是关于如何仅部署单个可执行文件的主要内容,如果未能解决你的问题,请参考以下文章