没有找到MSVCR80D.dll的解决方案(转)

来源:互联网 发布:linux 网卡绑定模式 编辑:程序博客网 时间:2024/06/05 09:18

VS 2005中建立Win32工程时(以VS 2005中文版为例),你可能会遇到这样的运行错误:没有找到MSVCP80D.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。(还可能是其它几个类似的文件:MSVCR80D.dllMSVCM80D.dll)。对于VS2005新手,可能遇到的第一个问题便是此问题。

 出现这个问题是因为,VS 2005在生成可执行文件时使用了一种新的技术,该技术生成的可执行文件会伴随生成一个清单文件(manifest file)(.manifest后缀文件)(其本质上是XML文档,你可以用文本编辑器打开看看),并在链接完成后将该清单文件嵌入到exe文件中(默认情况下)。这是个新功能,微软弄了个新工具(mt.exe),而在FAT32文件系统中,在处理清单文件阶段,当增量链接时不能完成清单文件的更新(默认情况下),于是造成清单文件嵌入失败,从而使该exe文件运行时没有相应的清单文件而运行失败并提示如上错误。

解决方案很多,列举如下:

1.微软官方:在项目的属性|配置属性|清单工具|常规中的使用FAT32解决办法选择(默认为),重新生成项目即可解决问题。该方法是唯一真正针对问题所在而提出的解决方法,使清单工具可以正确更新。(此方法是官方解决方法,也比较方便,推荐,注意:一定要先配置这个选项,然后再编译工程,要不然还是不好用:)

2.找到你的工程的文件夹,如(myproject),找到其下的myproject\myproject\Debug\ myproject.rec,把它删掉(删掉整个Debug目录也可以),重新编译!

3. 由于这是在链接动态运行库出现的问题,所以你可以选择代码生成的连接方式为/MTd而非/MDd,不用这些DLL文件从而避免问题的出现。该方法有一个很显然的缺点:适用范围有限,并且也不是我等提倡的解决问题的方式,不推荐该方法。

4. 既然跟FAT32系统有关,那么我们可以选择在NTFS文件系统中开发从而避免该问题,此方法同上,也是采用的回避问题的方式,不为我等提倡。

5. 既然问题是在更新嵌入的清单文件时发生的,由于FAT32的原因而未能更新嵌入的清单文件,于是我们有如下两种解决方法:

    1)不启用增量链接。在项目的属性|配置属性|链接器|常规中的启用增量链接选择。此方法阻断了问题产生的源头,其每次生成exe文件时都直接嵌入清单文件,而不是默认的根据时戳而决定是否更新清单文件。

    2)不嵌入清单文件。在项目的属性|配置属性|清单工具|输入和输出中的嵌入清单选择,从而在生成exe文件时附随生成一个清单文件(默认情况下,其文件名为exe文件的全名加上“.manifest”),避免了嵌入清单文件可能失败的问题。在程序运行时,会用到该清单文件。显然,这种方式使可执行程序产生了更多的外部依赖,不推荐。

 6.还有一个非常好的、一劳永逸的方法,不过使用起来要小心谨慎。这个方案可以直接在应用向导中配置,符合高级人机界面要求:

       1)首先找到你的vs.net安装目录(如我的是E:\Program Files\Microsoft Visual Studio 8),定位到Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application文件夹,备份这个Application文件夹,不然一会你自己改咂了我可不管啊:)。

       2)打开html\2052,看到两个文件了吧,就那个AppSettings.htm了,这个管着你的那个配置向导的界面,用UE等编辑工具打开,在266“                </SPAN>”后回车,然后插入一下内容:

<!-- this (hua)section is added by HUA. -->

                    <br><br><br><br><br>

                    

                <span class="itemTextTop" id="FILE_SYSTEM_SPAN"title="">选择你所使用的文件系统:

                    

                       <P CLASS="Spacer"></P>

                    

                        <INPUT TYPE="radio" CLASS="Radio" checkedonPropertyChange="" NAME="filesystem" ID="FAT32"ACCESSKEY="F" TITLE="FAT32">

                        <DIV CLASS="itemTextRadioB" ID="FAT32_DIV"TITLE="FAT32">

                        <LABEL FOR="FAT32"ID="FAT32_LABEL">FAT32(<U>F</U>)</LABEL>

                        </DIV>

                      <BR>

                        <INPUT TYPE="radio" CLASS="Radio"onPropertyChange="" NAME="filesystem" ID="NTFS"ACCESSKEY="N" TITLE="NTFS">

                        <DIV CLASS="itemTextRadioB" ID="NTFS_DIV"TITLE="NTFS">

                        <LABEL FOR="NTFS"ID="NTFS_LABEL">NTFS(<U>N</U>)</LABEL>

                        </DIV>

                </span>

<!-- end of (hua)section -->

好,保存关闭,这个改完了,准备下一个。

       3    打开scripts\2052,这里就一个文件,ue打开它,找到138“        var bATL = wizard.FindSymbol("SUPPORT_ATL");”其后回车,插入如下内容:

// this (hua)section is added by HUA.

         var MFTool =config.Tools("VCManifestTool");

         MFTool.UseFAT32Workaround= true;

// end of (hua)section    

         好,继续找到210(源文件的210,你加了上边的语句就不是210了:)“        config = proj.Object.Configurations.Item("Release");”注意这次要在这行前边加如下内容:

// this (hua)section is added by HUA.

         if(bFAT32)

         {

            var MFTool = config.Tools("VCManifestTool");

            MFTool.UseFAT32Workaround = true;

         }

// end of (hua)section    

       好了,终于都改完了,打开你的vs.net 2005新建一个win32应用程序看看吧,效果还不错吧:)

       另外附个国外的bbshttp://forums.microsoft.com/MSDN/default.aspx?SiteID=1

Msdn的,上边有vs.net的开发人员活动,都是很官方的东西,大家可以看看。

    另外,还有一个不能称为方法的土办法:每次Build前手动删除*.ilk文件(增量链接文件)(当然可以在项目属性中写入删除命令,使其自动执行),不推荐该土办法。

    最后,总结一下:

     1. 此问题只在特定条件下才会出现:在FAT32文件系统中编译、默认设置(增量模式、不启用FAT32解决方案、嵌入清单文件)、非第一次生成可执行文件文件(即在增量连接、更新清单文件时)。

    2. 解决方案14.1方便实用,推荐使用。
原创粉丝点击