VS2017的C++程序部署

两种部署方式

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的功能:


    1910087-8b9724476479bc04.png
    VC运行时库的dll

    这里没有atl的dll是因为用头文件和静态库取代了
    一般而言,我们会需要vcruntimexxx.dll和msvcpxxx.dll(连同msvcpxxx_x.dll)

猜你喜欢

转载自blog.csdn.net/weixin_33727510/article/details/87215891