一、debug和release的區別
debug:除錯版本,包含除錯資訊,所以容量比release大很多,並且不進行任何優化(優化會使除錯複雜化,因為源**和生成的指令間關係會更複雜),便於程式設計師除錯。debug模式下生成兩個檔案,除了.exe或.dll檔案外,還有乙個.pdb檔案,該檔案記錄了**中斷點等除錯資訊
release:發布版本,不對源**進行除錯,編譯時對應用程式的速度進行優化,使得程式在**大小和執行速度上都是最優的。(除錯資訊可在單獨的pdb檔案中生成)。release模式下生成乙個檔案.exe或.dll檔案
二、obj資料夾的作用
obj目錄中也有debug和release兩個子目錄,obj目錄是專案生成dll的源目錄,然後將生成好的dll複製到bin目錄下。obj用於存放編譯過程中生成的中間臨時檔案。在.net中,編譯時分模組進行的,每個模組的編譯結果都儲存在obj目錄下,最後會合併為乙個.exe或則.dll檔案儲存到bin目錄下。
因為每次編譯都是增量編譯,也就是只重新編譯改變了的模組,所以這個obj目錄的作用就是儲存這些小塊的編譯結果,加快編譯速度。
三、debug 和 release 編譯方式的本質區別
debug 通常稱為除錯版本,它包含除錯資訊,並且不作任何優化,便於程式設計師除錯程式。release 稱為發布版本,它往往是進行了各種優化,使得程式在**大小和執行速度上都是最優的,以便使用者很好地使用。
debug 和 release 的真正秘密,在於一組編譯選項。下面列出了分別針對二者的選項(當然除此之外還有其他一些,如/fd /fo,但區別並不重要,通常他們也不會引起 release 版錯誤,在此不討論)
debug 版本:
/mdd /mld 或 /mtd 使用 debug runtime library(除錯版本的執行時刻函式庫)
/od 關閉優化開關
/d "_debug" 相當於 #define _debug,開啟編譯除錯**開關(主要針對assert函式)
/zi 建立 edit and continue(編輯繼續)資料庫,這樣在除錯過程中如果修改了源**不需重新編譯
/gz 可以幫助捕獲記憶體錯誤
/gm 開啟最小化重鏈結開關,減少鏈結時間
release 版本:
/md /ml 或 /mt 使用發布版本的執行時刻函式庫
/o1 或 /o2 優化開關,使程式最小或最快
/d "ndebug" 關閉條件編譯除錯**開關(即不編譯assert函式)
/gf 合併重複的字串,並將字串常量放到唯讀記憶體,防止被修改
實際上,debug 和 release 並沒有本質的界限,他們只是一組編譯選項的集合,編譯
器只是按照預定的選項行動。事實上,我們甚至可以修改這些選項,從而得到優化過的調
試版本或是帶跟蹤語句的發布版本。
四、附錄:
dll的災難
人們將不同版本dll混合造成的不一致性形象的稱為 「動態連線庫的地獄「(dll hell) ,甚至微軟自己也這麼說(
如果你的程式使用你自己的dll時請注意:
不能將debug和release版的dll混合在一起使用。debug都是debug版,release版都是release版。
解決辦法是將debug和release的程式分別放在主程式的debug和release目錄下
所以在實際生產環境中,盡量使用release版本的dll。
VTK 安裝後編譯debug版和release版
之前只用xcode,itk,vtk的時候安裝完就ok了,現在需要用到qt就有問題了 因為qt需要用到vtk 的release版的一些檔案,看了些文章,記錄一下。mac安裝vtk以後,openobject 開始了 2 在run選項後面info選擇release,然後all build。在哪看到rele...
專案發布Debug和Release版的區別
一 debug和release的區別 debug 除錯版本,包含除錯資訊,所以容量比release大很多,並且不進行任何優化 優化會使除錯複雜化,因為源 和生成的指令間關係會更複雜 便於程式設計師除錯。debug模式下生成兩個檔案,除了.exe或.dll檔案外,還有乙個.pdb檔案,該檔案記錄了 中...
專案發布Debug和Release版的區別
一 debug和release的區別 debug 除錯版本,包含除錯資訊,所以容量比release大很多,並且不進行任何優化 優化會使除錯複雜化,因為源 和生成的指令間關係會更複雜 便於程式設計師除錯。debug模式下生成兩個檔案,除了.exe或.dll檔案外,還有乙個.pdb檔案,該檔案記錄了 中...