2009-05-29 21 views
6

Ecco il mio scenario. Ho un progetto che contiene 30 sottoprogetti. In uno dei progetti ho usato CLR (Common Language Runtime), quindi ho modificato il suo runtime con/mdd (multi-threaded debug DLL).Come risolvere i seguenti errori del linker in Visual Studio?

Individualmente tutti i progetti sono stati realizzati con successo. Ma quando provo a compilare il progetto principale sto ottenendo i seguenti errori del linker:

LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library 


LIBCMTD.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRTD.lib(MSVCR80D.dll) 
LIBCMTD.lib(invarg.obj) : error LNK2005: __invalid_parameter already defined in MSVCRTD.lib(MSVCR80D.dll) 
LIBCMTD.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in MSVCRTD.lib(MSVCR80D.dll) 
LIBCMTD.lib(crt0.obj) : error LNK2005: _mainCRTStartup already defined in MSVCRTD.lib(crtexe.obj) 
LIBCMTD.lib(fclose.obj) : error LNK2005: _fclose already defined in MSVCRTD.lib(MSVCR80D.dll) 
LIBCMTD.lib(printf.obj) : error LNK2005: _printf already defined in MSVCRTD.lib(MSVCR80D.dll) 
LIBCMTD.lib(mbstowcs.obj) : error LNK2005: _mbstowcs already defined in MSVCRTD.lib(MSVCR80D.dll) 
LIBCMTD.lib(dbgrptw.obj) : error LNK2005: __CrtDbgReportW already defined in MSVCRTD.lib(MSVCR80D.dll) 
LIBCMTD.lib(wcstombs.obj) : error LNK2005: _wcstombs already defined in MSVCRTD.lib(MSVCR80D.dll) 
LIBCMTD.lib(tzset.obj) : error LNK2005: __tzset already defined in MSVCRTD.lib(MSVCR80D.dll) 
LIBCMTD.lib(stricmp.obj) : error LNK2005: __stricmp already defined in MSVCRTD.lib(MSVCR80D.dll) 

come risolvere questi tutti?

risposta

22

LIBCMTD è la versione di debug della libreria statica multi-threaded C runtime. MSVCR80D è una versione di debug della libreria di runtime C multi-thread basata su DLL. Alcuni dei tuoi sottoprogetti ne richiedono uno, l'altro. È un disastro di Microsoft, ma devi affrontarlo. Scegli una DLL di debug multithreading e usala esclusivamente per la versione Debug del tuo progetto e tutti i sottoprogetti. La licenza Microsoft (mi è stato detto) richiede l'uso di una versione non di debug per il software rilasciato.

vedere il seguente per ulteriori informazioni: CLICK.

Screenshot

+2

P.S. Quando converti tutto in una singola versione del runtime C (CRT), fai un progetto "pulito" e "ricostruisci" su ogni progetto separatamente. –

Problemi correlati