最近在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...