使用VS2008,在項目屬性中有一項MFC的使用,有三種設置:
1.使用標准Windows庫
2.在共享DLL中使用MFC
3.在靜態庫中使用MFC
第一種顧名思義。
第二種指的是打包時一些MFC的DLL的內容沒有被包含在EXE文件中,所以EXE文件較小,但是運行時要求系統中要有相關的DLL文件。
第三種是將DLL中的相關代碼寫進EXE文件中,文件較大,但是可以在沒有相關DLL的機器上運行。
同時,如果程序本來是第二種方式,發給同事,在同事機器上運行時,可能會出現錯誤: “無法啟動程序……,由於應用程序配置不正確,未能啟動此應用程序。”我覺得,在開發階段的程序都選第3種比較好吧,不用管大小以及效率,等后期打包的時候用spy等其他工具都可以,來偵測DLL等就行了。(http://blog.csdn.net/xiexievv/article/details/6314874)
"在共享DLL中使用MFC"指的是打包時一些MFC的DLL的內容沒有被硬編碼到在EXE文件中,所以EXE會文件較小,但是運行時要求運行的系統環境中要有相關的DLL文件.
"在靜態庫中使用MFC"是將DLL對應的lib靜態庫中的相關代碼硬編碼到EXE文件中,文件較大,但是可以在沒有已經被包含DLL的機器上運行,當然即使如此也並非所有的DLL都會將其硬編碼到Exe中,因此仍然某些DLL是必須的.比如Redistributable Package中的某些DLL.
靜態庫中編譯出來的可執行文件拿到其它機器上也可以運行,共享DLL中編譯出來的可執行文件在本機上可以執行,若拿到其它機器上就需要相應的動態庫支持。
另外,共享DLL下的工程大小會稍小一些,但是在另一台機器上運行時務必保證那一台機器上有動態庫支持。