MFC調用OpenCV的程序移植問題——靜態編譯

1,內存泄露問題

參考OpenCV和MFC一起用的時候出現內存泄露》http://blog.csdn.net/vanlin5566/article/details/9724823


出現上述問題檢查兩個方面:

(1)new的變量是否delete掉,或者malloc的變量是否free掉;

(2)排除掉(1)中的情況,則最可能是MFC動態調用opencv庫經常出現的問題,改爲靜態編譯,就能避免這些內存泄露問題。詳述見下一部分。

(3)MFC檢查內存泄露的一些技巧,參考關於MFC下檢查和消除內存泄露的技巧http://www.cnblogs.com/BeyondTechnology/archive/2011/03/27/1996735.html


2,Opencv程序的靜態編譯

       平時調用opencv都是動態編譯,此時如果需要將程序移植到沒有安裝VS和opencv庫的電腦上運行,則必須把相應的庫和頭文集一塊拷貝才行。爲了不這麼麻煩,靜態編譯就可以解決程序的移植問題。具體參考:

(1)OpenCV學習筆記(22)OpenCV_SVN靜態庫的編譯》http://blog.csdn.net/chenyusiyuan/article/details/6573999

(2)《在靜態庫下使用MFC和共享DLL下使用MFC 這兩種情況 opencv的配置,以及配置opencv配置中容易出現的問題》http://blog.csdn.net/computer_liuyun/article/details/26978073?utm_source=tuicool&utm_medium=referral


其中比較重要的兩點:

(1)opencv靜態庫無需重新編譯,在vs10文件夾中有個staticlib文件夾,其中放置的就是opencv靜態庫。在靜態編譯時,需要將庫文件地址改爲staticlib;

(2)靜態編譯調用庫比動態庫要多出幾個,一旦出現fatal Error:Link的錯誤,基本上就是調用庫的問題,仔細檢查。這裏還有一個庫vfw32.lib,需要特別注意,它不在staticlib文件夾裏,如果出現“(cvcap_vfw.obj) : error LNK2001: unresolved external symbol _AVIFileRelease@4等錯誤,並不是opencv鏈接庫的問題,而是opencv在調用win32下的vfw庫。需要在依賴項裏添加這個庫。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章