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库。需要在依赖项里添加这个库。




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