MFC的工程包smcinst,編譯后出現以下錯誤
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.


標準程序庫有關的選項: /ML、/MLd、/MT、/MTd、/MD、/MDd。
這些選項對應編譯器應用程序所要使用運行時C標準程序庫。
/ML(缺省選項)對應單線程靜態版的標準程序庫(libc.lib);
/MT對應多線程靜態版標準庫(libcmt.lib),此時編譯器會自動定義_MT宏;
/MD對應多線程DLL版(導入庫msvcrt.lib,DLL是msvcrt.dll),編譯器自動定義_MT和_DLL兩個宏。后面加d的選項都會讓編譯器自動多定義一個_DEBUG宏,表示要使用對應標準庫的調試版,因此/MLd對應調試版單線程靜態標準庫(libcd.lib),
/MTd對應調試版多線程靜態標準庫(libcmtd.lib);
/MDd對應調試版多線程DLL標準庫(導入庫msvcrtd.lib,DLL是msvcrtd.dll)。

因此,上述的conflicts原因是出現了對運行庫版本調用的不一致。
將有相互調用關系的工程屬性->代碼生成->運行時庫 設置成統一選項,如 /mtd.