MSVCP120D.dll引起的32位和64位程序运行区别

本人的第一篇技术博客,如有遗漏请见谅。
在没有装vs2013的电脑上(装了vcredist_x86),一个64位应用程序在运行时,弹出0xc000007b错误。而装了vs2013,可以运行。让人摸不着头脑,百度遍了也没找到具体问题,引出了下面操作。
肯定是vs2013安装了一些东西,从而程序可以运行。因为已经装了vc32位运行库vcredist_x86,判断可能是64位程序和32位运行库冲突,因此装了vcredist_x64,但问题依然存在。
查看exe文件夹中的几十个dll,无从下手。exe正常运行时,如果找不到需要的dll会提示缺少“.dll”,因此手动删除部分dll,双击运行exe,没有提示缺少“.dll”,还是弹出0xc000007b错误,直到删除msvcp120d.dll,再运行exe,提示缺少msvcp120d.dll。加上msvcp120d.dll,又提示0xc000007b。问题就出现在这个dll上,exe加载dll时,找到了名为msvcp120d.dll的dll,但是dll存在问题,终止加载其他dll。
问题来了,msvcp120d.dll是系统dll,作用是什么?
1. 运行库dll解析
msvcr120.dll是
MS = Microsoft
V = Visual
C = C program language
R = Run-time
120 = Version
msvcp120.dll是
MS = Microsoft
V = Visual
CP = C++
120 = version
msvcr120d.dll和msvcp120d.dll是
debug版本
release版本dll是vcredist_x86.exe和vcredist_x64.exe安装的(x86安装到syswow64,x64安装到system32)。
debug版本dll是vs2013安装的(32位dll安装到syswow64,64位dll安装到system32)。

  1. 64系统下,system32文件夹存放的dll是64位dll,syswow64文件夹存放的dll是32位dll。这一点很容易弄混淆。
    这个exe需要msvcr120d.dll和msvcp120d.dll支持,而exe所在文件夹中的这两个dll是32位的,因此导致错误。
    装上vs2013后,会在system32文件夹中放入64位的msvcr120d.dll和msvcp120d.dll,在syswow64文件夹中放入32位的msvcr120d.dll和msvcp120d.dll。64位exe运行时会去system32文件夹寻找这两个dll,因此可以运行。

    windows应用程序运行搜索路径先后顺序:
    默认是 应用程序所在目录->系统system目录->windows目录->当前目录->path环境变量指定目录
    应用程序所在目录和前目录是exe所在目录。
    没有安装vs2013:
    64位程序首先寻找应用程序所在目录,找到32位dll,不对,继续找system32目录,没有找到,最终报错(找到了错误的dll)。
    安装了vs2013的电脑:
    64位exe所在的应用程序目录里有32位的msvcr120d.dll,不是应该先搜索到这个dll吗?为什么可以运行?
    

验证:
将64位dll拷贝到system32文件夹中,正常运行。
64位程序首先寻找应用程序所在目录,找到32位dll,不对,继续找system32目录,找到了64位dll,正常运行。
将32位dll拷贝到system32文件夹中,将64位dll拷贝到应用程序目录中,正常运行。
64位程序首先寻找应用程序所在目录,找到64位dll,找到正常运行。应用程序目录中的dll不能删除,说明加载了,system32中的dll可以删除,说明没加载。
将32位dll拷贝到system32文件夹中,将32位dll拷贝到应用程序目录中,报错。
说明在搜索路径中,只要有一个路径中有正确的dll,exe就可以运行。
3. 32位应用程序访问system32文件夹中的程序,系统会自动导向syswow64文件夹,即32位程序访问的是32位dll,是用不了64位dll。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值