假设我使用Visual Studio 2015将以下C代码构建到 HelloWorld.exe
中,目标是Release,平台x64 .
#include <iostream>
int main()
{
std::cout << "Hello world!!" << std::endl;
return 0;
}
多年前,我可以简单地复制 msvcp###.dll
(或 msvcr###.dll
代表C)和 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年运行时的一部分并随之而来?
2 回答
我倾向于静态链接运行时(/ MT和/ MTd编译器选项),而不是处理安装可再发行组件 .
它确实会导致更大的文件大小,但它比远程运送DLL要小 .
您可以使用安装程序分发VC 2015可再发行组件 .
https://www.microsoft.com/en-us/download/details.aspx?id=48145
如果这不是一个选项,静态链接它 .
你也可以运行取决于确定其他什么DLL 's you need. You can ignore api-ms*.dll' s:Dependency Walker: missing dlls