动态库使用 (简单)

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")               即可解决(也可在工程中设置).