Error C1189: #error: Please use the /MD switch for _AFXDLL builds


在VS 2013中編譯程序時出現錯誤:

錯誤提示1:

error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

原因

常規里面是:在靜態庫中使用MFC,或使用標准Windows庫,此時該處可能無論是什么都會報錯

運行庫中多線程調試是:MDd(多線程調試DLL)

解決方法

將MDd改成MTd,如果改正后報錯誤2,按下面方法更改。

 

 錯誤提示2:

error C1189: #error: Please use the /MD switch for _AFXDLL builds 

原因

常規里面是:在共享DLL中使用MFC,

運行庫中多線程調試是:MTd(多線程調試)

解決方法

將常規改成:在靜態庫中使用MFC,或使用標准Windows庫

 

常規和運行庫  如下圖:

常規:  右擊項目->屬性->配置屬性->常規,然后在右邊的“項目默認值”中的“MFC的使用”選項中選擇“在靜態庫中使用MFC”,

多線程調試:  右擊項目-->屬性->配置屬性->c/c++->代碼生成->運行時庫->多線程調試(/MTd)

 

相關注釋:

MFC的使用,有三種設置: 

 1.使用標准Windows庫

 2.在靜態庫中使用MFC:是將DLL中的相關代碼寫進EXE文件中,文件較大,但是可以在沒有相關DLL的機器上運行;

 3.在共享DLL中使用MFC:指的是打包時一些MFC的DLL的內容沒有被包含在EXE文件中,所以EXE文件較小,但是運行時要求系統中要有相關的DLL文件;

多線程調試

/MD:在dll中使用多線程,創建動態鏈接庫的release版本,需要選擇。

/MT: 在exe里使用多線程,創建exe的release版本,需要選擇。

/MTd:同/MT一樣,不過是在Debug版本中使用。

/MDL:同/MD一樣,不過是在Debug版本中使用。

 

如果是Debug的“在靜態庫中使用MFC”,不要使用MDd,改用MTd,然后編譯即可通過。

如果是Debug的“在共享DLL中使用MFC”,注意不要使用MTd,改用MDd;

如果是Release版本“在靜態庫中使用MFC”,不要使用MD,使用MT;

如果是Release版本的“在共享DLL中使用MFC”,不要使用MT,使用MD。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM