MFC的工程包smcinst,編譯后出現(xiàn)以下錯(cuò)誤
MSVCRTD.lib(MSVCRTD.dll)   :   error   LNK2005:   _free   already   defined   in   libcmtd.lib(dbgheap.obj)
MSVCRTD.lib(MSVCRTD.dll)   :   error   LNK2005:   _malloc   already   defined   in   libcmtd.lib(dbgheap.obj)
....
LINK   :   warning   LNK4098:   defaultlib   "MSVCRTD "   conflicts   with   use   of   other   libs;   use   /NODEFAULTLIB:library
Debug/NKOTwain.ocx   :   fatal   error   LNK1169:   one   or   more   multiply   defined   symbols   found
Error   executing   link.exe.


標(biāo)準(zhǔn)程序庫(kù)有關(guān)的選項(xiàng): /ML、/MLd、/MT、/MTd、/MD、/MDd。
這些選項(xiàng)對(duì)應(yīng)編譯器應(yīng)用程序所要使用運(yùn)行時(shí)C標(biāo)準(zhǔn)程序庫(kù)。
/ML(缺省選項(xiàng))對(duì)應(yīng)單線程靜態(tài)版的標(biāo)準(zhǔn)程序庫(kù)(libc.lib);
/MT對(duì)應(yīng)多線程靜態(tài)版標(biāo)準(zhǔn)庫(kù)(libcmt.lib),此時(shí)編譯器會(huì)自動(dòng)定義_MT宏;
/MD對(duì)應(yīng)多線程DLL版(導(dǎo)入庫(kù)msvcrt.lib,DLL是msvcrt.dll),編譯器自動(dòng)定義_MT和_DLL兩個(gè)宏。后面加d的選項(xiàng)都會(huì)讓編譯器自動(dòng)多定義一個(gè)_DEBUG宏,表示要使用對(duì)應(yīng)標(biāo)準(zhǔn)庫(kù)的調(diào)試版,因此/MLd對(duì)應(yīng)調(diào)試版單線程靜態(tài)標(biāo)準(zhǔn)庫(kù)(libcd.lib),
/MTd對(duì)應(yīng)調(diào)試版多線程靜態(tài)標(biāo)準(zhǔn)庫(kù)(libcmtd.lib);
/MDd對(duì)應(yīng)調(diào)試版多線程DLL標(biāo)準(zhǔn)庫(kù)(導(dǎo)入庫(kù)msvcrtd.lib,DLL是msvcrtd.dll)。

因此,上述的conflicts原因是出現(xiàn)了對(duì)運(yùn)行庫(kù)版本調(diào)用的不一致。
將有相互調(diào)用關(guān)系的工程屬性->代碼生成->運(yùn)行時(shí)庫(kù) 設(shè)置成統(tǒng)一選項(xiàng),如 /mtd.