2009-05-29 102 views
6

这是我的场景。我有一个包含30个子项目的项目。在我使用CLR(公共语言运行库)的项目之一中,我使用/ mdd(多线程调试DLL)修改了它的运行时。如何在Visual Studio中解决以下链接器错误?

个别所有项目都成功建成。但是,当我尝试编译主 项目我得到以下链接错误:

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) 

如何解决这些呢?

回答

22

LIBCMTD是静态的多线程C运行时库的调试版本。 MSVCR80D是基于DLL的多线程C运行时库的调试版本。你的一些子项目要求一个,另一个。这是微软的混乱,但你必须处理它。选择一个,比如多线程调试DLL,并专门用于项目的Debug版本和所有子项目。微软许可证(我被告知)要求您使用发布的软件的非调试版本。

详情参见以下内容:CLICK.

Screenshot

+2

附:当您将所有内容转换为C运行时(CRT)的单一版本时,请分别在每个项目上执行“清理”和“重建”项目。 – 2010-03-02 22:49:56