这是我的场景。我有一个包含30个子项目的项目。在其中一个项目中,我使用了CLR (公共语言运行时),所以我用/mdd (多线程调试DLL)修改了它的运行时。
单独地,所有的项目都被成功构建。但是当我尝试编译主项目时,我得到了以下链接器错误:
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)如何解决这些问题呢?
发布于 2010-03-03 06:43:18
LIBCMTD是静态多线程C运行时库的调试版本。MSVCR80D是基于动态链接库的多线程C运行时库的调试版本。你的一些子项目需要一个,一些需要另一个。这是一个微软的烂摊子,但你必须处理它。选择一个,比方说,多线程调试DLL,并将其专门用于项目和所有子项目的调试版本。Microsoft许可证(我被告知)要求您对已发布的软件使用非调试版本。
有关更多信息,请参阅以下内容:CLICK.

发布于 2009-05-29 11:29:14
你的一些项目似乎使用了静态运行时库。(并且您已经为您的一个项目选择了dynamic )不支持这种组合。
https://stackoverflow.com/questions/925540
复制相似问题