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.