“由于找不到msvcr100d.dll...”和“由于找不到msvcp100d.dll...”的解决方法与相关知识

0. 前言

前阵子把系统搞崩了,被迫重装了系统。配完需要用到的库之后,我满心欢喜的打开项目,结果在debug的时候提示找不到msvcr100d.dll和msvcp100d.dll,由于自己是非科班出身,在解决这个问题的时候费了老鼻子劲了,而且在解决过程中发现一些网上的解决方案其实是有错误的。本着造福人类(pa gei wang le)的目的,决定整理一套解决该问题的方法,并针对一些所涉及的知识点进行简单备注说明。如有理解上或根本上的错误,还望有经验的朋友不吝指教。(同为臭打游戏的朋友可以直接看第三部分)

1.是什么?

后缀为.dll的文件一般被称为动态链接库(Dynamic Link Library),其命名格式中为msvc是Microsoft Visual C++的缩写,100表示版本(100对应2010版),存放在Windows系统文件夹中,是保证系统正常运行的不可或缺的文件;msvcp100d最后的d表示该动态链接库包含living debug所需的功能。

2.为什么把从网上下的两个文件放到系统文件夹中仍存在问题?

最初我在解决该问题的时候,首先想到的是重新安装运行库。但无论是从官网下载运行库组件包(Microsoft VisualC++ 2010 Redistributable Package)进行手动安装,还是直接使用DirectX_Repair进行自动修复,在系统文件夹下我都只能找到msvcp100.dll和msvcr100.dll,并没有找到msvcp100d.dll和msvcr100d.dll。(我目前的理解就是如果缺少两个带d的文件,那在写程序时就无法debug,这可能也是很多教程在安装完运行库并切换到release后就直接说问题解决了的原因,歪打正着了属于是?但其实我并没有完全理解这两个文件到底有啥区别orz)

其实我本身是拒绝“缺什么补什么”这种简单粗暴的治疗方式的,但苦于一直解决不了,所以决定尝试直接下载两个文件并放到系统文件夹中。它终于不弹出“由于找不到msvcr100d.dll…”了!

它开始弹“应用无法正确启动(0xc000007b)…”…Orz

中间的探索过程就不说了,我直接321上结论:问题在于文件和系统位数不匹配,也就是64位和32位的问题。 首先应该明确两个问题:

(1)操作系统位数和软件位数的关系?
操作系统位数大家都至少知道有64位和32位的区分(不知道自己电脑位数的右键此电脑-属性-系统类型),软件也同样有64位软件和32位软件。要知道的是,32位软件可以在64位系统上运行,但一般情况下64位的软件是不可以在32位系统上运行的。 这是由于64位系统中基本上都有32位的库文件,而32位系统中没有64位的库文件。 因此首先你要确定你下载的DLL到底是64位还是32位,否则如果你将32位的DLL放到64位系统的系统文件夹中,且软件调用了64位的函数,自然会报错。

(2)你真的知道哪个文件夹是“系统文件夹”?
网上很多回答会告诉你,在64位操作系统中,要把32位的DLL放到C:\Windows\System32文件夹中,64位的DLL放到C:\Windows\SysWOW64文件夹中。我只能说这“望文生义”了属于是,但也不能怪我们,最初的32位系统中,是在C:\Windows\System中存放16位的DLL文件,在C:\Windows\System32中存放32位的DLL文件。但在64位操作系统中,C:\Windows\System32中存放的是64位DLL,C:\Windows\SysWOW64中存放的则是32位DLL。(SysWOW64的含义是Windows on Windows 64)。
为了表达的更清晰,我做个表格来说明不同位数操作系统在相同名称的文件夹存储的是哪些位数的DLL文件的:

\System \System32 SysWOW64
32位系统 16位DLL 32位DLL -
64位系统 - 64位DLL 32位DLL

所以,就算你下对了相应位数的DLL文件,也可能会因为这个问题放错文件夹导致报错。

3.怎么办?

321上链接!
https://download.csdn.net/download/m0_38143943/33824638
如果你跟我一样,在安装过对应版本的运行库后仍存在缺少这两个DLL的问题,下载链接中的压缩包,将“32位”文件夹下的两个DLL复制替换到C:\Windows\SysWOW64中,将”64位“文件夹下的两个DLL复制替换到C:\Windows\System32中,保险起见重启,就可以解决这个问题了。

第一次发文,不足之处还请大家指正,文中我提到的问题,也希望有大佬能给解答~

你可能感兴趣的:(操作系统,dll,msvc)