VC++程序脱机运行DLL库缺失问题总结

当VC++程序在未安装VS环境的电脑上运行时,可能会出现DLL库缺失的问题。这通常由于缺少MFC和C++运行时库导致。解决方案包括静态链接CRT库、安装相应版本的VCRedist或调整工程配置。对于VS2015,Universal CRT的变化需要通过Windows Update或VCRedist安装更新。
摘要由CSDN通过智能技术生成

        常用VS开发软件的同学们经常会遇到“程序在本机运行正常,拷贝到其他电脑上运行会报***.DLL缺失”的问题,本人也是深受该问题折磨,在此对该类问题做一个总结。为了方便问题的描述,我将开发程序的电脑称为“developer",运行程序的电脑称为”runner“。

一、追根索源

        表面上看,此类问题一般由两种原因引起:一是runner没有安装VS开发环境;二是runner的VS版本与developer不一致。具体细究起来,又可以发现,一般缺这么几个库(分为release和debug:

1,release版

mfc100.dll        msvcp100.dll        msvcr100.dll        

2,debug版

mfc100d.dll        msvcp100d.dll        msvcr100d.dll 


注:以上仅以vs2010为例,如果是vs2012或vs2013,则其中的数字分别为110和120。而vs2015不遵循这个规则,它引入了Universal CRT(C-Runtime),后面专门说。


        其中,mfc100.dll是MFC工程相关的库,另外两个是Mircrosoft Visual C++ Runtime Library相关的库。

        如果新建的工程是MFC工程或MFC DLL库,则必须包含MFC库。因此,我们新建工程的时候,如无必要,尽量新建为win32 console工程或win32 DLL工程,这样就不需要包含MFC的库。

        而另外两个CRT库是微软的VC++编译器依赖的C-Runtime库,不同的C/C++编译器有不同的C-Rumtime库。不同版本的编译器也不相同,故有msvcp*.dll和msvcr*.dll。


3,VS2015的CRT的变化

        到VS2015的时候,CRT的包含规则发生了一些变化,可以参考MSDN上Visual C++团队的博客:Introuducing the Universal CRT。具体包括:

1)msvcr*.dll不再存在了,它的功能被分散到编译器版本相关的”vcruntime140.dll“和操作系统相关的”ucrtbase.dll“。

2)”ucrtbase.dll“是操作系统的一部分,不能像之前的msvcr*.dll,直接拷贝到*.exe下就可运行,而是需要在runner上安装VS2015的”redis.exe“(redistribution)。

3)CRT相关的头文件、源文件和库文件从 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC 迁移到了C:\Program Files (x86)\Windows Kits\10 。

4)它包含有以下几个版本

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值