OpenCV與Debug和Release模式
1、Release和Debug的區別
Release版稱為發行版,Debug版稱為調試版。
Debug中可以單步執行、跟蹤等功能,但生成的可執行文件比較大,代碼運行速度較慢。Release版運行速度較快,可執行文件較小,但在其編譯條件下無法執行調試功能。
Release的exe文件鏈接的是標準的MFC DLL(Use MFC in a shared or static dll)。這些DLL在安裝Windows的時候已經配置,所以這些程序能夠在沒有安裝Visual C++的機器上運行。而Debug版本的exe鏈接了調試版本的MFC DLL文件,在沒有安裝Visual C++的機器上不能運行,因為缺相應的DLL,除非選擇use static dll when link。
Debug 和 Release 並沒有本質的區別,他們只是VC預定義提供的兩組編譯選項的集合,編譯器只是按照預定的選項行動。如果我們願意,我們完全可以把Debug和Release的行為完全顛倒過來。當然也可以提供其他的模式,例如自己定義一組編譯選項,然後命名為MY_ABC等。習慣上,我們仍然更願意使用VC已經定義好的名稱。
Debug版本包括調試信息,所以要比Release版本大很多(可能大數百K至數M)。至於是否需要DLL支持,主要看你采用的編譯選項。如果是基於ATL的,則Debug和Release版本對DLL的要求差不多。如果采用的編譯選項為使用MFC動態庫,則需要MFC42D.DLL等庫支持,而Release版本需要MFC42.DLL支持。Release不對源代碼進行調試,不考慮MFC的診斷宏,使用的是MFC Release庫,編譯時對應用程序的速度進行優化,而Debug則正好相反,它允許對源代碼進行調試,可以定義和使用MFC的 診斷宏,采用MFC Debug庫,對速度沒有優化。
既然Debug和Release僅僅是編譯選項的不同,那麽為什麽要區分Debug和Release版本呢?
Debug和Release,在我看來主要是針對其面向的目標不同的而進行區分的。Debug通常稱為調試版本,通過一系列編譯選項的配合,編譯的結果通常包含調試信息,而且不做任何優化,以為開發人員提供強大的應用程序調試能力。而Release
2、Opencv在Release和Debug下配置的區別
上文已經說明Release和Debug的區別,所以Opencv在Debug和Release不同環境下都需要進行對應的配置的。
另外我們需要註意,Opencv並不是Windows下標準庫,所以它的DLL文件在安裝Windows的時候並不會隨之配置。也就是說Release和Debug環境下,Opencv庫都有對應的Lib和DLL文件,我們在對應模式下都需要配置。並且在發行程序exe之後,隨之的DLL文件也需要放置在同一文件夾中,否則程序會報錯找不到對應的DLL文件。
參考於:
http://blog.csdn.net/FX677588/article/details/72622011
https://www.zhihu.com/question/24400428 知乎上的關於opencv debug和release版本的永久配置
http://blog.csdn.net/leo2007608/article/details/38963947 CSDNS上的opencv debug和release版本的永久配置
http://www.cnblogs.com/xujianqing/p/5356559.html 關於opencv轉換debug和release版本出現的問題。
關於debug和release的問題,個人覺得還是分別建兩個新項目屬性OpencvDebug和OpencvRelease比較方便。
OpenCV與Debug和Release模式