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.