MFC的工程包smcinst,編譯后出現(xiàn)以下錯誤
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.
標準程序庫有關(guān)的選項: /ML、/MLd、/MT、/MTd、/MD、/MDd。
這些選項對應(yīng)編譯器應(yīng)用程序所要使用運行時C標準程序庫。
/ML(缺省選項)對應(yīng)單線程靜態(tài)版的標準程序庫(libc.lib);
/MT對應(yīng)多線程靜態(tài)版標準庫(libcmt.lib),此時編譯器會自動定義_MT宏;
/MD對應(yīng)多線程DLL版(導入庫msvcrt.lib,DLL是msvcrt.dll),編譯器自動定義_MT和_DLL兩個宏。后面加d的選項都會讓編譯器自動多定義一個_DEBUG宏,表示要使用對應(yīng)標準庫的調(diào)試版,因此/MLd對應(yīng)調(diào)試版單線程靜態(tài)標準庫(libcd.lib),
/MTd對應(yīng)調(diào)試版多線程靜態(tài)標準庫(libcmtd.lib);
/MDd對應(yīng)調(diào)試版多線程DLL標準庫(導入庫msvcrtd.lib,DLL是msvcrtd.dll)。
因此,上述的conflicts原因是出現(xiàn)了對運行庫版本調(diào)用的不一致。
將有相互調(diào)用關(guān)系的工程屬性->代碼生成->運行時庫 設(shè)置成統(tǒng)一選項,如 /mtd.