如何在Visual Studio中解决以下链接器错误?

Cut*_*ute 6 clr visual-studio-2008 visual-studio

这是我的场景.我有一个包含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)
Run Code Online (Sandbox Code Playgroud)

如何解决这些问题?

Jiv*_*son 22

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

有关详细信息,请参阅以下内容: 点击.

截图

  • Ps当您将所有内容转换为C运行时(CRT)的单个版本时,请分别在每个项目上执行"清理"和"重建"项目. (2认同)

EFr*_*aim 8

好像你的一些项目使用静态运行时库.(并且您已为其中一个项目选择了动态)此组合不受支持.

让我想起:Visual C++中多个项目之间的链接器错误