如何仅部署单个可执行文件

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 在其中备受推崇(但已付费)。

【讨论】:

以上是关于如何仅部署单个可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将资源嵌入到单个可执行文件中?

如何在 DACPAC 部署中仅部署一组选定的存储过程?

Qt 部署的可执行文件打开空白应用程序

如何在单个可执行文件中将数据重定向到标准输入?

如何在 Visual Studio 2008 中创建单个可执行文件?

在单个可执行文件中组合 C# 和 C++ 代码