動態 靜態編譯以及MD MDd MT MTd編譯

2021-07-31 18:21:36 字數 1302 閱讀 9681

最近在vs2012中新建了乙個mfc的工程,在自己電腦上執行很好,但是當拷貝到同學電腦上的時候一直出現「差dll」或者是「應用程式無法啟動」的錯誤。後來找出原因,是自己編譯的時候選擇靜態還是動態編譯的問題。

解決辦法1:讓同學安裝了vs2012,注意這裡必須是和自己編譯器相同的版本,比如是2013就不行。

解決辦法2:在自己這邊用靜態編譯,重新生成可執行檔案即可。

1、區別:動態編譯的生成的可執行檔案的exe小,但是執行需要系統環境具有相關的dll檔案,就是動態呼叫系統相關的檔案才能執行;靜態編譯生成的可執行檔案exe大,但是執行的時候不依賴於系統環境所依賴的dll和lib等環境問題,在編譯的時候已經這些dll相關檔案編譯進了exe檔案,所以exe檔案較大,但是執行的時候不會依賴於系統環境。所以需要自己建立的工程需要在別的電腦上執行,考慮到穩定性,同時對執行檔案的大小沒有要求的話還是盡量選擇靜態編譯。

2、vs中兩種編譯狀態的設定:在工程的「屬性」中進行修改。具體截圖如下:

共享dll – 動態編譯;靜態庫中使用 – 靜態編譯。

1、設定:在設定動態和靜態編譯後就需要對「c/c++ –> **生成 –> 執行庫」進行設定,具體截圖如下:

2、編譯形式和四種執行庫的配置關係如下:

(1)、靜態編譯: debug狀態下 – mtd; release狀態下 – mt

(2)、動態編譯: debug狀態下 – mdd;release狀態下 – md

記住:靜態編譯為t,動態編譯為d,debug下有個字母d,release下沒有字母d

在vs2012中新建乙個mfc對話方塊工程,分別配置和設定。

1、動態編譯debug下: exe大小為185kb

2、動態編譯release下: exe大小為88.5kb(release版本下少了很多中間檔案所以比debug下的小)

3、靜態編譯debug下: exe大小為8.81mb

4、靜態編譯release下: exe大小為3.37mb(release版本下少了很多中間檔案所以比debug下的小)

可以明顯注意到靜態編譯的生成的exe檔案比動態生成的exe檔案要大很多,因為編譯的時候將相應的dll也編譯進去exe之中,所以exe的大小會很大。

linux GCC編譯過程以及靜態庫動態庫編譯

一 gcc編譯指令各項引數 四個步驟 預處理 e gcc o test.i e test.c 彙編 s gcc o test.s s test.c 機器碼 c gcc o test.o c test.c 鏈結 依賴的檔案 gcc o test test.o o 生成目標 g 除錯 1.常用引數 l ...

apache動態編譯 靜態編譯區別

以前編譯apache的時候 都是google搜尋到的直接拿來用 這次自己編譯mod rewrite和ssl遇到了問題 又不知道問題出在 乙個是mod rewrite模組沒有起作用 乙個是以ssl啟動apache的時候報告如下錯誤 後來經過查詢 明白了問題出在 當時我是這麼編譯apache的 conf...

apache動態編譯 靜態編譯問題

以前編譯apache的時候 都是google搜尋到的直接拿來用 這次自己編譯mod rewrite和ssl遇到了問題 又不知道問題出在 乙個是mod rewrite模組沒有起作用 乙個是以ssl啟動apache的時候報告如下錯誤 後來經過查詢 明白了問題出在 當時我是這麼編譯apache的 conf...