http://blog.163.com/dingmz_frcmyblog/blog/static/21730402320132123358913/
動態庫使用(簡單)
1、在VC2010加入OpenCV所有頭文件路徑即可(包括opencv和opencv2兩個文件夾下面的所有文件,一般是將opencv2整個文件夾copy到opencv文件夾下)(解決方案->C/C++->常規->附加包含目錄)
2、在VC2010加入OpenCV所需庫文件路徑(解決方案屬性->連接器->常規->附加庫目錄)
3、在VC2010加入OpenCV所需庫文件名稱(解決方案屬性->連接器->輸入->附加依賴項)
靜態庫使用
OpenCV靜態庫了。
在VC2010使用這些靜態庫也是很有講究的
首先要注意幾點:
1、在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
videoInput.lib(“3rdparty”文件夾中沒有,且系統也沒有,此文件在OpenCV爲編譯的源碼包中有,ctrl+F去搜索)
atlthunk.lib(可能整個電腦中都沒有此文件,百度上下載,其實也有其他方法來解決"打不開此文件的錯誤",看下面的錯誤糾正)
opencv_lapack.lib
-------------------------------------------------------
注意:以上這些庫很重要,不然即使加了下面3中的OpenCV常用靜態庫也是沒用的,會有很多錯誤!
3、在”解決方案屬性->連接器->輸入->附加依賴項“中加入常用的cv210d.lib
cxcore210d.lib highgui210d.lib
4、在”解決方案屬性->連接器->常規->附加庫目錄“中加入這些庫文件(我通常將“3rdparty”文件夾中的庫文件copy到當前工程的cv210d.lib
cxcore210d.lib highgui210d.lib文件所在同級目錄下)所在路徑
----------------------------------------------------------------------------------------------------------------
錯誤糾正 - 以下是在一個項目中出現的錯誤(不過只要按照以上幾個步驟使用靜態庫,這些錯誤不會發生)
----------------------------------------------------------------------------------------------------------------
Error 1:有時候使用靜態庫會出現一下問題:
1>Store_SCU.obj : error LNK2005: _DllMain@12 已經在 dllmain.obj 中定義
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,裏邊的內容爲
----------------------------------------------------------------------------------
// dllmain.cpp : 定義 DLL 應用程序的入口點。
#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")
即可解決(也可在工程中設置).