OpenCV2411+VS2013的配置(问题总结)

OpenCV各个版本在VS2013下的配置在网上有很多人进行了详细的介绍,在此不作赘述,主要是配置环境变量,添加各种依赖库的问题。
但是如果照着文档一步一步走便能轻松大功告成的话,程序员们可能做梦都会笑醒。所以说bug是无处不在的,我们的目标就是消除一切bug!生气
Q1:error LNK2019: 无法解析的外部符号 _gzputs,该符号在函数 "void __cdecl icvPuts(struct CvFileStorage*,char const *)" (?icvPuts@@YAXPAUCvFileStorage@@PBD@Z) 中被引用。

A1:在项目---属性---链接器---输入---附加依赖项中添加依赖项(reference):


libpngd.lib

libtiffd.lib

zlibd.lib

IlmImfd.lib
libjasperd.lib
libjpegd.lib
comctl32.lib
gdi32.lib
vfw32.lib

Q2:errorLNK1104: 无法打开文件“.obj”

A2:检查一下附加依赖项中是否有两个库写在同一行了,两个库(.lib)必须以回车分开.

Q3:RELEASE和DEBUG模式下lib切换的问题

error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”
error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”

A3:在第一次配置opencv库的时候,大多数人可能会一次性将opencv中对应的debug和release的库都添加到项目属性的附加依赖项中,但往往在之后调试的过程中会出现上述错误。
首先需要弄清debug和release的区别(reference),在调试时选择属性---C/C++---代码生成---运行库时需要弄清下面几个概念:

多线程调试Dll (/MDd) 对应的是MD_DynamicDebug

多线程Dll (/MD) 对应的是MD_DynamicRelease

多线程(/MT) 对应的是MD_StaticRelease

多线程(/MTd)对应的是MD_StaticDebug

另外,在opencv的库中,以d结尾的表示debug对应的库,其他表示release的库。

在此推荐一种简洁方便的方法,新建一个.h文件,放在opencv的include/opencv2文件夹下(我的是D:\Open2411\opencv\build\include\opencv2),此后只用在程序中包含这个头文件便能成功通过编译。

//配置DEBUG和RELEASE模式下的opencv库


#ifndef _OPENCV_LIB_
#define _OPENCV_LIB_

#ifdef _DEBUG
#pragma comment(lib, "opencv_calib3d2411d.lib")
#pragma comment(lib, "opencv_contrib2411d.lib")
#pragma comment(lib, "opencv_core2411d.lib")
#pragma comment(lib, "opencv_features2d2411d.lib")
#pragma comment(lib, "opencv_flann2411d.lib")
#pragma comment(lib, "opencv_gpu2411d.lib")
#pragma comment(lib, "opencv_highgui2411d.lib")
#pragma comment(lib, "opencv_imgproc2411d.lib")
#pragma comment(lib, "opencv_legacy2411d.lib")
#pragma comment(lib, "opencv_ml2411d.lib")
#pragma comment(lib, "opencv_nonfree2411d.lib")
#pragma comment(lib, "opencv_objdetect2411d.lib")
#pragma comment(lib, "opencv_photo2411d.lib")
#pragma comment(lib, "opencv_stitching2411d.lib")
#pragma comment(lib, "opencv_ts2411d.lib")
#pragma comment(lib, "opencv_video2411d.lib")
#pragma comment(lib, "opencv_videostab2411d.lib")
#else
#pragma comment(lib, "opencv_calib3d2411.lib")
#pragma comment(lib, "opencv_contrib2411.lib")
#pragma comment(lib, "opencv_core2411.lib")
#pragma comment(lib, "opencv_features2d2411.lib")
#pragma comment(lib, "opencv_flann2411.lib")
#pragma comment(lib, "opencv_gpu2411.lib")
#pragma comment(lib, "opencv_highgui2411.lib")
#pragma comment(lib, "opencv_imgproc2411.lib")
#pragma comment(lib, "opencv_legacy2411.lib")
#pragma comment(lib, "opencv_ml2411.lib")
#pragma comment(lib, "opencv_nonfree2411.lib")
#pragma comment(lib, "opencv_objdetect2411.lib")
#pragma comment(lib, "opencv_photo2411.lib")
#pragma comment(lib, "opencv_stitching2411.lib")
#pragma comment(lib, "opencv_ts2411.lib")
#pragma comment(lib, "opencv_video2411.lib")
#pragma comment(lib, "opencv_videostab2411.lib")
#endif

#endif

如果大家已经在附加依赖项中添加了所有的库,可以在视图---其他窗口---属性管理器---双击Microsoft.Cpp.Win32.user删除掉添加的openCV库再添加头文件,否则会有其他错误出现。
最后,万事开头难,大家多点耐心一定会解决问题的! 微笑



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值