两种部署方式
VS构建的C++程序的部署,一般都是以下的两种方式:
- central deployment:运行vcredist_x86.exe或vcredist_x86.exe,把对应的运行时库文件安装到系统目录去
- local deployment:自己的程序目录下带上依赖的运行时库文件
VS2015以前的很长一段时间,本地部署的方式都是把相应版本的msvcrxx.dll和msvcpxx.dll带上就行了,但是从VS2015开始,由于ucrt(the Universal CRT)的引入,本地部署的方式又发生了改变。
需要考虑ucrt和vc crt这两个组件的部署,下面我们分别来阐述一下
Universal CRT的本地部署
关于ucrt,这篇文章(下一代VC运行时库系统:the Universal CRT)有比较详细的介绍,这里就不再展开,我们重点说下本地部署的注意事项
- win10 sdk里有ucrt本地部署文件,目录位置在 Windows Kits\10\Redist<sdk版本>\ucrt\DLLs\x86,里面是一系列API相关的api-ms-win-xxx.dll和ucrtbase.dll。
因为每个系统需要的dll都会不同,所以这里最好把全部的api-ms-win-xxx.dll都带上 - 因为在win10上,ucrt是os的核心组件,所以即使程序进行了ucrt的本地部署,运行的时候,还是会使用系统目录的ucrt,即使我们带的ucrt版本更高也是这样。(可以认为win10不支持ucrt的本地部署)
- 在win8及以前的系统上,ucrt的dll必须和程序的exe处在同个目录下
VC dll的部署
- 所需的VC CRT文件的位置在:Program Files (x86)\Microsoft Visual Studio<VS版本><VS版本类别>\VC\Redist\MSVC<VC版本>\x86\Microsoft.VCXXX.CRT
- dot libraries:为了维持msvcp140.dll的二进制兼容,新增加的一些功能性的东西会通过另外的增补dll来提供,形如:msvcp140_1.dll,msvcp140_2.dll等等,这些最好也连同msvcp140.dll一起带上
-
选择所需的dll,目录下有好几个vc的dll,这里列出来相关的dll的功能:
VC运行时库的dll
这里没有atl的dll是因为用头文件和静态库取代了
一般而言,我们会需要vcruntimexxx.dll和msvcpxxx.dll(连同msvcpxxx_x.dll)