manifest hell

        在将程序一直到VS2005之后,又不出现了一些问题,比如兼容性问题,好在这个问题网上有很多人都遇到过,所以不难解决。
        然而在我将程序打包发到别人机子上,又出现了无法运行的错误,错误为“VC2005程序的一个运行错误 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”。 
        由于上篇博文已经介绍了这个类似的错误,我也是有了一点经验,网上一搜,结果发现这个问题出现的次数并不少。 网上比较通用的做法是 在类似C:\Program Files\Microsoft Visual Studio 8\VC\redi st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件: msvcm80d.dll ,msvcp80d.dll ,Microsoft.VC80.DebugCRT.manifest ,msvcr80d.dll, 把这几个文件拷贝到目标机器上, 这个问题是由于编译选项为/MD的程序需要动态加载dll,也就包括了一些运行时库,当找不到的时候就报上述错误。

而我这么照做之后发现并不行,所以只好自己一边资料,一边排错(事件查看器+depends walker),找了一下午,基本上明确了怎么错的。

原因在于恶心的manifest。。。记住以后这种问题一定看看自己引用的dll的manifest依赖的运行库的版本

        以下是我的总结:
        这个点目前看来是由于/MD的程序需要动态加载dll,而干净机器上没有DLL导致的,另外manifest文件的信息也会影响程序的运行,必须版本匹配,真正原因在于这个版本的libclamavd.dll的manifest要求的Microsoft.VC80.DebugCRT.manifest版本为version="8.0.50608.0",该版本使用于xp,而按照网上做法我拷贝到exe目录的Microsoft.VC80.DebugCRT.manifest版本为version="8.0.50727.762",该版本使用于vista,所以导致无法识别,进而程序无法启动。
解决办法:(1)将程序按照release版本编译,设置configurate properties中code genaration为/MTd,同时设置configurate properties中的general中的use MFC为Use MFC in a Static Library,同时在linker中设置Linker->Input->Additional Dependencies 加上 nafxcw.lib libcpmt.lib,Linker->Input->Ignore Specific Library 加入 nafxcw.lib libcpmt.lib (这一条网上有解释)。
(2)将Microsoft.VC80.DebugCRT.manifest版本及其下属的msvcr80d.dll,msvcp80d.dll,msvcm80d.dll三个文件拷贝到exe文件所在目录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值