http://hi.baidu.com/stand_add/blog/item/7dce3387158ad63667096eca.html
VC2008下提示找不到MSVCP90D.dll的解决办法
VS 2005/VS 2008在生成可执行文件时使用了一种新的技术,该技术生成的可执行文件会伴随生成一个清单文件(manifest file)(.manifest后缀文件)(其本质上是XML文档,你可以用文本编辑器打开看看),并在链接完成后将该清单文件嵌入到exe文件中(默认情况下)。而在FAT32文件系统中,在处理清单文件阶段,当增量链接时不能完成清单文件的更新(默认情况下),于是造成清单文件嵌入失败,从而使该exe文件运行时没有相应的清单文件而运行失败并提示如上错误。
解决方案很多,列举如下:
1. 由于这是在链接动态运行库出现的问题,所以你可以选择代码生成的连接方式为 /MTd 而非 /MDd ,不用这些DLL文件从而避免问题的出现。该方法有一个很显然的缺点:适用范围有限,不推荐该方法。
注:/MT /MTD MD /MDD 之间的关系可以参见 VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结;另外如果使用/MT 或者/MTD 那么生成的文件的尺寸基本上是使用/MD 或者/MDD的10倍大小
2. 既然跟FAT32系统有关,那么我们可以选择在NTFS文件系统中开发从而避免该问题,此方法同上,也是采用的回避问题的方式,不提倡。(我个人推荐使用这种方法)
3. 该方法仍与FAT32有关:在项目的“属性|配置属性|清单工具|常规(Project | Game Properties | Configuration Properties | C/C++ | Code Generation | Runtime Library)”中的“使用FAT32解决办法”选择“是”(默认为“否”),重新生成项目即可解决问题。该方法是唯一真正针对问题所在而提出的解决方法,使清单工具可以正确更新。(此方法是官方解决方法,也比较方便,推荐)
4. 既然问题是在更新嵌入的清单文件时发生的,由于FAT32的原因而未能更新嵌入的清单文件,于是我们有如下两种解决方法:
(1)不启用增量链接。在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“否”。此方法阻断了问题产生的源头,其每次生成exe文件时都直接嵌入清单文件,而不是默认的根据时戳而决定是否更新清单文件。
(2)不嵌入清单文件。在项目的“属性|配置属性|清单工具|输入和输出”中的“嵌入清单”选择“否”,从而在生成exe文件时附随生成一个清单文件(默认情况下,其文件名为exe文件的全名加上“.manifest”),避免了嵌入清单文件可能失败的问题。在程序运行时,会用到该清单文件。显然,这种方式使可执行程序产生了更多的外部依赖,不推荐。
另外,还有一个不能称为方法的土办法:每次Build前手动删除*.ilk文件(增量链接文件)(当然可以在项目属性中写入删除命令,使其自动执行),不推荐该土办法。
最后,总结一下:
1. 此问题只在特定条件下才会出现:在FAT32文件系统中编译、默认设置(增量模式、不启用FAT32解决方案、嵌入清单文件)、非第一次生成可执行文件文件(即在增量连接、更新清单文件时)。(注意)
2. 解决方案1和4.1方便实用,推荐使用。
ps:我个人认为解决这个问题的最好方法就是使用vc2005/vc2008的时候,在ntfs文件系统上进行开发(也就是第2种方法)。当前的绝大多数软件在ntfs文件系统都能够正常的运行(即便是dos类的工具也能在ntfs文件系统上良好的运行),为什么还要死抱着fat/fat32文件系统不放呢?
另外要注意一个概念问题,“VC2008下提示找不到MSVCP90D.dll”这是属于开发问题,是由于windows文件系统的bug(fat32的bug),导致vc2005/vc2008开发工具编译出来的程序不能正常的运行
分享到:
相关推荐
msvcp90d.dll
包含四个文件Microsoft.VC90.DebugCRT.manifest msvcm90d.dll msvcp90d.dll msvcr90d.dll
2、复制文件“msvcp110.dll”到系统目录下。 3、系统目录一般为:C:\WINNT\System32 64位系统为C:\Windows\SysWOW64 4、最后点击开始菜单-->运行-->输入regsvr32 msvcp110.dll 后,回车即可解决错误提示。
windows2008/windows2008r2/win7 Msvcp71.dll和Msvcr71.dll错误的解决方法 MSVCP71.DLL和msvcr71.dll文件都是VC7运行库文件,如果缺少了这两个文件,会使得很多常用软件无法正常运行。如果在 windows 7或者windows ...
微软的Visual Studio最终用户许可协议是禁止发布...下载msvcp120d.dll和msvcr120d.dll到OpenCV库路径中:D:\softwares\OpenCV\opencv\build\x86\vc12\bin。这样当我们不使用opencv时也不会调用这两个库文件,比较安全。
msvcr80d.dll msvcp80d.dll mfc80d.dll Microsoft.VC80.DebugCRT.manifest
VS2013运行VC6.0编写的程序时,报错找不到msvcrtd.dll;mfc42d.dll;msvcp60d.dll;mfco42d.dll;msvcp60.dll。将以上文档复制到C:\Windows\SysWOW64目录下即可。
如果您的系统提示“找不到msvcp60.dll ”或“msvcp60.dll缺失”或者“msvcp60.dll错误”的问题,下载并解压文件后: 32位直接复制到C:\Windows\SYSTEM32下,然后点击开始-运行-输入regsvr32 msvcp60.dll,即可解决...
3、Windows XP/WIN7/win10系统(64位系统对应64位dll文件,32位系统对应32位dll文件),将msvcp140d.dll复制到C:\Windows\System32目录下。 4、如果您的系统是64位的请将32位的dll文件复制到C:\Windows\SysWOW64...
一、如果您的系统提示"找不到msvcp100d.dll"或"msvcr100d.dll缺失"等等,请不用担心,请把下载到本机。 二、直接拷贝该目录到WIN7系统的C:\Windows目录 三、然后打开"开始-运行-输入regsvr32 msvcp100d.dll和regsvr...
msvcp140d.dll 丢失 msvcp140.dll 丢失 两个不同的库文件,也有32位和64位,测试过真实有用,不好找。
Win7丢失MSVCP100.dll导致程序无法启动的解决办法,包含32位与64位两种
msvcp140d.dll-system32msvcp140d.dll-sysWOW64vcruntime140d.dll-system32vcruntime140d.dll-sysWOW64使用时要将dll后缀的system32、sysWOW64去掉,sysWOW64代表64位系统使用,放到C:\Windows\SysWOW64目录下。...
编译程序缺失文件需要的32位和64位都有,msvcp120.dll msvcp120d.dll msvcr120.dll msvcr120d.dll集合包,亲测有效。
msvcp90d.dll msvcp90d.dll msvcp90d.dll msvcp90d.dll msvcp90d.dll
MSVCP71.DLL和msvcr71.dll文件都是VC7运行库文件,如果缺少了这两个文件,会使得很多常用软件无法正常运行。 复制到c:windowssystem32文件夹下