本文為原創作品,轉載請注明出處
歡迎關注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/
作者:晨鳧追風
關於Opencv的一個bug的解決方法
錯誤:
Opencv配置完之后運行一切都很正常,也愉快的弄了一些demo,然而突然有一天,我心血來潮想要在release下運行一下自己的代碼,於是出現了一個很美的畫面:
輸出窗口顯示錯誤信息:
0x50AA8B98 (opencv_highgui249d.dll) (template_example.exe 中)處的第一機會異常: 0xC0000005: 讀取位置 0xACC6BCCD 時發生訪問沖突。
0x50AA8B98 (opencv_highgui249d.dll) (template_example.exe 中)處有未經處理的異常: 0xC0000005: 讀取位置 0xACC6BCCD 時發生訪問沖突。
提示內存錯誤,算是Opencv的一個bug,在Debug下可以運行,在release下卻不能運行報錯。
介紹一下來龍去脈:
在對Opencv進行配置的時候,配置鏈接庫的時候會有一堆 .lib的文件,其中Debug文件庫名有d結尾,release沒有d。
如:opencv_video249d.lib — debug 庫。
opencv_video249.lib — release 庫。
按照一般的網上配置教程,會出現debug下可以運行,release下不能運行的情況(報錯原因是由於字符串讀取問題引起的如圖像載入不了,內存出現錯誤,指針錯誤等情況)。
因為在附加依賴項配置的時候,會優先選擇寫在前面的那一類lib作為支持的調試方式,一般我們把帶d的寫在前面,於是就出現了默認在debug下可以載入圖像,識別字符串等操作。如果把不帶d的寫在前面,那就默認release下調試。
解決方法:
在配置的時候就添加一類依賴項,如:就只添加帶d的那一類,於是就只支持debug模式下的調試,這時候想要在release下也能調試,就在當前工程的release模式下自己將不帶d的依賴項添加進去:【項目】—【屬性】—【配置屬性】—【鏈接器】—【輸入】—【附加依賴項】,添加即可。
上圖:1、選擇release模式調試
2、選擇當前項目屬性
3、添加附加依賴項:把不帶d的庫添加進去,運用就ok了
4、
至此完成。
感覺在配置的時候只添加一類,只添加帶d的或者只添加不帶d的庫,這樣在用到另外一種模式的時候再去修改當前工程的屬性配置(並不是之前的固有屬性)。這樣做讓人感覺更加清爽,兩個全部添加,畢竟系統只默認在前面的那一種庫。
如有不足之處歡迎批評指正,原創作品,轉載請注明出處!謝謝!后續的學習總結會陸續推出!歡迎廣大愛好者交流!