`
孤独舞者
  • 浏览: 88848 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

该死的微软vs编译c++时候出现mfc90d.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开发工具编译出来的程序不能正常的运行。
分享到:
评论

相关推荐

    mfc90d.dll

    mfc90d.dll mfc90d.dll mfc90d.dll mfc90d.dll mfc90d.dll mfc90d.dll

    VS2008DLLmsvcr90d.dll

    《深入理解VS2008中的msvcr90d.dll》 msvcr90d.dll是Visual Studio 2008开发环境中的一个重要组件,全称为Microsoft Visual C++ Runtime Library Debug Version。这个动态链接库文件在软件开发过程中扮演着不可或缺...

    msvcp90d.dll

    **msvcp90d.dll** 是一个动态链接库(DLL)文件,主要与Microsoft Visual C++运行时库相关联。这个文件是开发过程中用于调试的版本,其中的字母"D"代表"Debug",意味着它包含了额外的调试信息,帮助程序员在开发阶段...

    解决vs2008建立vc控制台应用程序时,出现“没有找到msvcr90d.dll”的错误,并且闪一下就没了的情况

    在使用Visual Studio 2008 (VS2008) 开发VC++控制台应用程序时,有时会遇到一个常见的问题:程序运行时提示“没有找到msvcr90d.dll”的错误,而且应用程序窗口会瞬间关闭,即“闪一下就没了”。这个错误通常与动态...

    Microsoft.VC90.DebugCRT.manifest msvcm90d.dll msvcp90d.dll msvcr90d.dll

    2. **msvcm90d.dll**:这是Microsoft Visual C++的Math Library (C++)的Debug版本动态链接库。它包含了C++标准库中用于数学运算的函数,如复数运算、矩阵运算等。在开发阶段,Debug版本的库会包含额外的检查和调试...

    msvcr90d.dll

    当运行vs2008时,经常提示找不到 msvcr90d.dll的提示,甚是郁闷,网上找遍各种方法,有的是吧磁盘格式改为ntfs,我试了还是不行,终于下到了这个bug,将他放在system32下,果然行了。希望对大家有帮助。

    VC6.0-depends查看dll工具[含msvcr90d.dll, ieshims.dll].rar

    1. **MSVCR90D.DLL**:这是一个Microsoft Visual C++运行时库的动态链接库,"D"表示这是调试版本。该库包含了C++标准库函数、C运行时库以及一些MFC(Microsoft Foundation Classes)类,是VC6.0编译的程序运行的必要...

    msvc90d.dll动态库

    当你在使用Visual Studio进行开发或者运行某些基于VC++ 2008编译的应用程序时,可能会遇到“缺少msvc90d.dll”这样的错误提示,这意味着系统中缺少这个特定的动态库,导致程序无法正常运行。 **动态链接库的作用** ...

    VC2008下提示找不到MSVCP90D.dll的解决办法

    MSVCP90D.dll 是一个动态链接库文件,常用于 Visual C++ 应用程序中。在某些情况下,VS 2008 会弹出 MSVCP90D.dll 丢失的情况,用于解决此问题。 问题的根源在于,在 FAT32 文件系统中,时间精度不够,导致清单文件...

    msvcp90d.rar

    msvcp90d.dll是Microsoft Visual C++ 2008运行时库的一个动态链接库(Dynamic Link Library,DLL)文件,它是微软为开发人员提供的一组关键组件,用于支持C++应用程序的运行。这个文件在标题"msvcp90d.rar"中被提及...

    Visual studio2008 msvcr90d.dll+补丁

    当运行vs2008时,经常提示找不到 msvcr90d.dll的提示,网上有的是把磁盘格式改为NTFS,我是看到一篇这方面的文章,终于下到了这个msvcr90d.dll,将他放在system32下,然后安装一个补丁,这样就行啦,希望对大家有...

    vs2008环境dll;debug+release版本;mfc所需dll;

    例如,`msvcr90d.dll` 和 `mfcd90d.dll` 是VS2008 MFC的Debug版本,分别对应C运行时库和MFC库。 **Release版本**: 当应用程序准备好发布时,将使用Release版本的DLL。这些DLL经过了完整的优化,体积更小,运行效率...

    VC90动态库vc++2008中所需要的dll免安装.rar

    提供了vc++2008中的所有dll文件和环境,包括Debug版本文件mfc90d.dll,msvcm90d.dll,msvcp90d.dll,Microsoft.VC90.DebugCRT.manifest,Microsoft.VC90.DebugMFC.manifest等文件,非常方便调用c++的dll文件不用安装...

    用openCV打开视频时常见错误解决办法.docx

    OpenCV视频处理错误解决方法 OpenCV是一个功能强大的计算机视觉库,广泛应用...OpenCV视频处理错误可以通过解决预编译头文件错误、库文件依赖错误、MSVCR90D.DLL错误、FAT32文件系统错误和视频读取错误等方法来解决。

    Windows开发缺少的dll文件

    这些dll文件(如mfcdll.dll、mfc90d.dll等)包含了MFC库的实现,开发者可以利用它们快速构建基于Windows的图形用户界面。当使用MFC开发的应用程序运行时,如果没有相应的MFC库,就会出现找不到dll文件的错误。 解决...

    VS2008下MFC程序运行所需dll

    1. `msvcr90d.dll`:这是Visual C++ 2008运行时库的Debug版本,提供了基本的C++运行时功能。 2. `mfcdll.lib`:MFC的Debug库,包含了MFC类的实现。 3. 其他可能的系统DLLs,如`user32.dll`、`kernel32.dll`等,这些...

    msvcr90ddll_downcc.zip

    msvcr90d.dll是微软Visual C++运行时库的一个组件,属于Microsoft Visual Studio 2008的调试版本。这个动态链接库文件对于许多依赖于C++运行时环境的应用程序来说至关重要,因为它提供了基本的运行时功能,如内存...

    Microsoft.VC90.DebugCRT (x86)

    2. mfc90d.dll:调试版本的MFC(Microsoft Foundation Classes)库,为Windows应用程序开发提供类库支持。 3. atl90d.dll:调试版本的ATL(Active Template Library),用于简化COM(Component Object Model)编程。...

    VS2008运行时环境

    3. **Microsoft.VC90.DebugCRT.manifest**: 这是一个清单文件,用于描述依赖的运行时组件,它告诉系统在哪里可以找到`msvcr90d.dll`, `msvcp90d.dll`, `msvcm90d.dll`这些DLL文件。在安装或运行使用这些库的程序时,...

Global site tag (gtag.js) - Google Analytics