【问题标题】:VS 2015 C++ Redistributable not in a single DLL?VS 2015 C++ Redistributable 不在单个 DLL 中?
【发布时间】:2016-06-16 21:09:14
【问题描述】:

假设我使用 Visual Studio 2015 将以下 C++ 代码构建到 HelloWorld.exe 中,目标版本为 x64 平台。

#include <iostream>

int main()
{
    std::cout << "Hello world!!" << std::endl;
    return 0;
}

几年前,我可以简单地复制 msvcp###.dll(或 C 的 msvcr###.dll)和 HellowWorld.exe 并拥有一个可运行的程序。

我刚刚安装了VS2015,现在看来我不能只带msvcp140.dll。我的 System32 文件夹中似乎有 70~ish api-ms-win-.....dll 文件需要随附。

我知道最好的策略是让他们安装可再发行组件...但是对于他们无法安装的情况,复制 .DLL 曾经是一种可行的替代方案。还是这样吗?我错过了一些简单的东西吗?

总结一下:我原以为我可以复制msvcp140.dll 并让它工作,但事实似乎并非如此。我错了吗?

注意:我在 list of things you are allowed to redistribute 中看不到 api-ms-....dll 文件。或者它是否理解这是 2015 运行时的一部分并且随之而来?

【问题讨论】:

  • 不。它充满了 DLL、调试 DLL、多线程 DLL 和各种 smurfing 类型的 DLL。您还希望这些 DLLS 受到保护并远离简单的篡改,因为只需快速更换文件,您的 PC 就会受到 Borg Collective 的欢迎。
  • 你没有错。只需进行静态构建,然后告诉任何抱怨文件大小的人获得一台新计算机。

标签: c++ visual-studio visual-studio-2015 runtime


【解决方案1】:

我倾向于静态链接运行时(/MT 和 /MTd 编译器选项),而不是安装可再发行组件。

它确实会导致更大的文件大小,但它远小于提供 DLL。

【讨论】:

    【解决方案2】:

    您可以使用安装程序分发 VC 2015 可再发行组件。

    https://www.microsoft.com/en-us/download/details.aspx?id=48145

    如果这不是一个选项,静态链接它。

    您还可以运行依赖项来确定您需要的其他 DLL。您可以忽略 api-ms*.dll 的:Dependency Walker: missing dlls

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      相关资源
      最近更新 更多