你如何打包视觉工作室c++项目发布?

jautem 发布于 2018-02-27 c++ 最后更新 2018-02-27 01:02 775 浏览

我想知道如何制作一个包含所有必需的dll文件到.exe的发布版本,以便程序可以在非开发机器上运行,而无需在目标机器上安装微软的可再发行组件。 如果不这样做,您会收到错误消息,指出应用程序配置不正确并重新安装。

已邀请:

reos

赞同来自:

你会看到静态链接(而不是动态链接) 我不确定有多少静态链接的MS可再发行组件。

noptio

赞同来自:

如果您正在查找哪个dll的目标机器丢失,请使用过去随MSDev一起提供的depends.exe,但也可以找到here。在一些目标机器上测试这个应该会告诉你你的应用需要打包哪些dll。

funde

赞同来自:

您需要将所有项目的运行时库(在C/C++ - >代码生成下)设置为静态链接,这与以下默认构建配置相关:

  • 多线程调试/发布
  • 单线程调试/发布
  • 与这些库的“DLL”版本相反。 即使你这样做,根据你使用的库,你可能需要安装一个合并模块/框架/等。这取决于您的依赖关系的静态LIB版本是否可用。

ncum

赞同来自:

  1. 选择项目 - >属性
  2. 选择配置 - >常规
  3. 在关于如何链接MFC的框中,选择静态链接它。
  4. 选择链接器 - >输入。在其他依赖关系下,添加需要应用的静态链接库。

mid

赞同来自:

请注意Microsoft do not recommend that you static link the runtime into your project,因为这可以防止它被Windows Update提供服务以修复重要的安全漏洞。如果您在主.exe和.dll文件之间传递内存,也会有潜在的问题,就好像每个静态链接都会导致运行时一样,最终可能会出现malloc/free不匹配问题。 您可以将DLL包含在可执行文件中,而不需要将它们编译到.exe中,也不需要运行重做工具 - 这就是我所做的,它似乎工作正常。 美中不足的是,如果要为各种Windows版本分发,则需要将文件包含两次 - 较新的操作系统需要清单定义的目录中的文件,而较旧的操作系统需要程序目录中的所有文件。