电脑配置环境描述:WIN10+VS+OpenCV 3.4.1 ×86Debug编译环境
问题描述
OpenCV高版本只能有×64版本的,为了实用32位编译平台自己编译了一个32位的OpenCV库,适用最高VS版本是VS,一直用的是release模式。结果今天第一次用debug模式出现了如标题所示问题,经过一番寻觅发现了出现问题的原因和解决方案。
问题产生的主要原因是vs编译了一个用vs生成的dll,是在选择第三方库时选择vc版本时出现的问题,dll文件和VS相关匹配情况如下。
vc8 = Visual Studio
vc9 = Visual Studio
vc10 = Visual Studio
vc11 = Visual Studio
vc12 = Visual Studio
MSVCP80.DLL is from Visual Studio
MSVCP90.DLL is from Visual Studio
MSVCP100.DLL is from Visual Studio
MSVCP110.DLL is from Visual Studio
MSVCP120.DLL is from Visual Studio
(MSVCR.dll的情况类似)
换句话说,就是人家OpenCV专用匹配的VS和你电脑上的VS版本不匹配。这也就解释了我心头的一个疑惑,就是如果说一个OpenCV只支持某几个VS版本,那我其他的VS版本是不是就不能用这个库了呢?答案是当然可以用,只不过需要"添油加醋一番",给你的电脑加上几个dll。
解决方案
首先要明白一个概念:64系统下,system32文件夹存放的dll是64位dll,syswow64文件夹存放的dll是32位dll。这一点很容易弄混淆。
那么第一个解决方案就是:那么假设你得到了缺失的这两个文件,(在32位编译环境中)那么就应该把它放在syswow64下,而不是system32。
第二个解决方案:既然MSVCR120.dll和MSVCD120.dll是VS的家伙,那就安装一个VS自然会自动安装。
第三个解决方案: 换一个适合自己IDE的OpenCV版本。
注:文件的下载请参考作者的资源,传送门/download/coldwindha/10635375。
附加解释
这两个文件到底代表什么意思,有什么用?
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是vs安装的(32位dll安装到syswow64,64位dll安装到system32)。