小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

動態(tài)、靜態(tài)編譯以及MD、MDd、MT、MTd編譯

 QomoIT 2020-08-19

一、問題的引出

最近在VS2012中新建了一個MFC的工程,在自己電腦上運(yùn)行很好,但是當(dāng)拷貝到同學(xué)電腦上的時候一直出現(xiàn)“差dll”或者是“應(yīng)用程序無法啟動”的錯誤。后來找出原因,是自己編譯的時候選擇靜態(tài)還是動態(tài)編譯的問題。
解決辦法1:讓同學(xué)安裝了VS2012,注意這里必須是和自己編譯器相同的版本,比如是2013就不行。
解決辦法2:在自己這邊用靜態(tài)編譯,重新生成可執(zhí)行文件即可。

二、動態(tài)和靜態(tài)編譯的區(qū)別

1、區(qū)別:動態(tài)編譯的生成的可執(zhí)行文件的exe小,但是運(yùn)行需要系統(tǒng)環(huán)境具有相關(guān)的dll文件,就是動態(tài)調(diào)用系統(tǒng)相關(guān)的文件才能運(yùn)行;靜態(tài)編譯生成的可執(zhí)行文件exe大,但是運(yùn)行的時候不依賴于系統(tǒng)環(huán)境所依賴的dll和lib等環(huán)境問題,在編譯的時候已經(jīng)這些dll相關(guān)文件編譯進(jìn)了exe文件,所以exe文件較大,但是執(zhí)行的時候不會依賴于系統(tǒng)環(huán)境。所以需要自己創(chuàng)建的工程需要在別的電腦上運(yùn)行,考慮到穩(wěn)定性,同時對執(zhí)行文件的大小沒有要求的話還是盡量選擇靜態(tài)編譯。
2、VS中兩種編譯狀態(tài)的設(shè)置:在工程的“屬性”中進(jìn)行修改。具體截圖如下:
這里寫圖片描述
共享dll – 動態(tài)編譯;靜態(tài)庫中使用 – 靜態(tài)編譯。

三、MD、MDd、MT、MTd編譯

1、設(shè)置:在設(shè)置動態(tài)和靜態(tài)編譯后就需要對“C/C++ –> 代碼生成 –> 運(yùn)行庫”進(jìn)行設(shè)置,具體截圖如下:這里寫圖片描述
2、編譯形式和四種運(yùn)行庫的配置關(guān)系如下:
(1)、靜態(tài)編譯: debug狀態(tài)下 – MTd; release狀態(tài)下 – MT
(2)、動態(tài)編譯: debug狀態(tài)下 – MDd;release狀態(tài)下 – MD
記?。红o態(tài)編譯為T,動態(tài)編譯為D,debug下有個字母d,release下沒有字母d

四、測試

在VS2012中新建一個MFC對話框工程,分別配置和設(shè)置。
1、動態(tài)編譯debug下: exe大小為185KB
2、動態(tài)編譯release下: exe大小為88.5KB(release版本下少了很多中間文件所以比debug下的小)
3、靜態(tài)編譯debug下: exe大小為8.81MB
4、靜態(tài)編譯release下: exe大小為3.37MB(release版本下少了很多中間文件所以比debug下的?。?
可以明顯注意到靜態(tài)編譯的生成的exe文件比動態(tài)生成的exe文件要大很多,因為編譯的時候?qū)⑾鄳?yīng)的dll也編譯進(jìn)去exe之中,所以exe的大小會很大。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多