2009-05-29 12 views
6

Aquí está Mi escenario. Tengo un proyecto que contiene 30 subproyectos. En uno de los proyectos, he utilizado CLR (Common Language Runtime), así que modifiqué su tiempo de ejecución con/mdd (DLL de depuración multi-hilo).¿Cómo resolver los siguientes errores del enlazador en Visual Studio?

Individualmente todos los proyectos se construyen con éxito. Pero cuando intento compilar el proyecto principal estoy recibiendo los siguientes errores de enlace:

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) 

cómo resolver estos absoluto?

Respuesta

22

LIBCMTD es la versión de depuración de la biblioteca de tiempo de ejecución C multi-hilo estática. MSVCR80D es una versión de depuración de la biblioteca de tiempo de ejecución C multiproceso de DLL. Algunos de tus subproyectos piden uno, otro el otro. Es un desastre de Microsoft, pero debes lidiar con eso. Seleccione uno, por ejemplo, DLL de depuración de subprocesos múltiples y utilícelo exclusivamente para la versión de depuración de su proyecto y todos los subproyectos. La licencia de Microsoft (me dicen) requiere que uses una versión que no es de depuración para el software lanzado.

Véase lo siguiente para más información: CLICK.

Screenshot

+2

P. S. Cuando convierta todo en una sola versión del tiempo de ejecución de C (CRT), haga un proyecto "limpio" y "reconstruya" en cada proyecto por separado. –

Cuestiones relacionadas