我们如何打包Visual Studio C ++项目以进行发布?
时间:2020-03-05 18:37:59 来源:igfitidea点击:
我想知道如何制作一个将所有必需的dll文件都包含到.exe中的发行版本,以便该程序可以在非开发计算机上运行,而不必在目标计算机上安装Microsoft可再发行组件。
否则,我们将收到错误消息,指出应用程序配置不正确,然后重新安装。
解决方案
回答
我们将寻找静态链接(而不是动态链接)
我不确定有多少MS可再发行版静态链接。
回答
如果要查找丢失目标计算机的dll,请使用MSDev附带的depends.exe,但也可以在此处找到。在一些目标计算机上进行测试应该可以告诉我们需要与应用程序一起打包哪个dll。
回答
我们需要将所有项目的运行时库(在C / C ++下->代码生成)设置为静态链接,该链接与以下默认构建配置相关:
- 多线程调试/发布
- 单线程调试/发布
与那些库的" DLL"版本相反。
即使这样做,根据所使用的库,我们可能也必须安装合并模块/框架/等。这取决于依赖项的静态LIB版本是否可用。
回答
- 选择项目->属性
- 选择配置->常规
- 在有关如何链接MFC的框中,选择静态链接它。
- 选择链接器->输入。在"其他依赖项"下,添加我们需要应用程序静态链接到的所有库。
回答
请注意,Microsoft不建议我们将运行时静态链接到项目中,因为这会阻止Windows Update为它提供服务以修复关键的安全错误。如果在主.exe和.dll文件之间传递内存,则也存在潜在的问题,就像这些静态链接中的每一个在运行时一样,最终可能会出现malloc / free不匹配问题。
我们可以将DLL包含在可执行文件中,而无需将其编译到.exe中,也无需运行redist工具,这就是我所做的,而且似乎工作正常。
美中不足的是,如果要分发各种Windows版本,则需要两次包含文件,较新的OS需要清单清单目录中的文件,而较旧的OS则需要程序目录中的所有文件。