1. 程式人生 > >OpenCV與Debug和Release模式

OpenCV與Debug和Release模式

機器 運行速度 com 環境 使用 行為 style atl cnblogs

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預定義提供的兩組編譯選項的集合,編譯器只是按照預定的選項行動。如果我們願意,我們完全可以把DebugRelease的行為完全顛倒過來。當然也可以提供其他的模式,例如自己定義一組編譯選項,然後命名為MY_ABC等。習慣上,我們仍然更願意使用VC已經定義好的名稱。
Debug版本包括調試信息,所以要比Release版本大很多(可能大數百K至數M)。至於是否需要DLL支持,主要看你采用的編譯選項。如果是基於ATL的,則DebugRelease版本對DLL的要求差不多。如果采用的編譯選項為使用MFC動態庫,則需要MFC42D.DLL等庫支持,而Release版本需要MFC42.DLL支持。Release不對源代碼進行調試,不考慮MFC的診斷宏,使用的是MFC Release庫,編譯時對應用程序的速度進行優化,而Debug則正好相反,它允許對源代碼進行調試,可以定義和使用MFC的 診斷宏,采用MFC Debug庫,對速度沒有優化。
既然DebugRelease僅僅是編譯選項的不同,那麽為什麽要區分DebugRelease版本呢?
DebugRelease,在我看來主要是針對其面向的目標不同的而進行區分的。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模式