在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。
