动态库使用 (简单)
1、在VC2010加入OpenCV所有 头文件路径即可(包括 opencv和 opencv2两个文件夹下面的所有文件,一般是 将opencv2整个文件夹copy到opencv文件夹下)(解决方案->C/C++->常规->附加包含目录)
VC2010加入OpenCV所需库 文件路径 (解决方案属性->连接器->常规->附加库目录)
3、 在 VC2010加入OpenCV所需库 文件名称(解决方案属性->连接器->输入->附加依赖项)
静态库使用
通过 “OpenCV - 编译静态OpenCV库(静态库)”一文中介绍的方法就应该能够得到了Debug和Release版本的
OpenCV静态库了。
在VC2010使用这些静态库也是很有讲究的
首先要注意几点:
在VC2010加入OpenCV所有 头文件路径 即可(包括 opencv 和 opencv2 两个文件夹下面的所有文件,一般是 将opencv2整个文件夹copy到opencv文件夹下 )(解决方案->C/C++->常规->附加包含目录)
2、在 ” 解决方案属性->连接器->输入->附加依赖项“中加入“ 3rdparty”文件夹中的所有静态库(这也是和动态库的区别之一,动态库不需要加入这些“辅助”库)
vfw32.lib(“ 3rdparty ”文件夹中没有,这时系统自带的,直接加入即可)
comctl32.lib (“ 3rdparty ” 文件夹 中没有,这时系统自带的,直接加入即可)
libjasper.lib
libjpeg.lib
libpng.lib
libtiff.lib
zlib.lib
( “ 3rdparty”文件夹中没有,且系统也没有,此文件在OpenCV为编译的源码包中有,ctrl+F去搜索 )
atlthunk.lib(可能 整个电脑中都没有此文件 , 百度上下载 ,其实也有其他方法来解决 "打不开此文件的错误",看下面的 错误纠正 )
opencv_lapack.lib
-------------------------------------------------------
注意: 以上这些库很重要,不然即使加了下面3中的OpenCV常用静态库也是没用的,会有很多错误!
3、在 ” 解决方案属性->连接器->输入->附加依赖项“中加入常用的 cv210d.lib cxcore210d.lib highgui210d.lib
” 解决方案属性->连接器->常规->附加库目录“ 中加入这些库文件(我通常将 “ 3rdparty”文件夹中的库文件copy到当前工程的 cv210d.lib cxcore210d.lib highgui210d.lib文件所在同级目录下 )所在路径
----------------------------------------------------------------------------------------------------------------
错误纠正 - 以下是在一个项目中出现的错误(不过只要按照以上几个步骤使用静态库,这些错误不会发生)
----------------------------------------------------------------------------------------------------------------
Error 1:有时候使用静态库会出现一下问题:
1>cxcore210.lib(cxsystem.obj) : error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义
【原因】重复定义了 _DllMain 函数
【解决】在响应文件("此例中为Store_SCU.cpp")中查找(ctrl+F)到"DllMain"的位置。然后注释掉
是最终保留一个即可。即注释掉Store_SCU.cpp和cxcore210.cpp中的一个就行了。
网上还看到另一种解决方法:
dllmian.cpp,里边的内容为
----------------------------------------------------------------------------------
#include "stdafx.h"
// global data
// The following symbol used to force inclusion of this module for _USRDLL
#ifdef _X86_
extern "C" { int _afxForceUSRDLL; }
#else
extern "C" { int __afxForceUSRDLL; }
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
----------------------------------------------------------------------------------
这样问题就 解决了。最重要的就是
#ifdef _X86_
extern "C" { int _afxForceUSRDLL; }
#else
extern "C" { int __afxForceUSRDLL; }
#endif
这段代码起到了强制执行你自定义的dllmain函数的作用
Error 2:fatal error lnk1104: 无法打开文件“ videoinput.lib”
”解决方案属性->连接器->输入->附加依赖项“中加入了“videoinput.lib”文件,且”解决方案属性->连接器->
常规->附加库目录“中存在此文件。
Error 3:在解决了Error 2中问题之后却出现了这个问题:
LINK : fatal error LNK1104: cannot open file ' atlthunk.lib '
【解决】 方法和上面Error 2中方法一样找到 'atlthunk.lib'(只能从网上下载,很简单),然后放到当前项目中并在
”解决方案属性->连接器->输入->附加依赖项“中加入了 'atlthunk.lib' 文件
此外还可以:
在程序源文件开始时加上 #pragma comment(linker, "/NODEFAULTLIB:atlthunk.lib") 即可解决(也可在工程中设置).