这是我的场景。
我在 visualstudio 中有一个现有解决方案,其中包含 15 个项目。
在某些项目中,我需要使用托管 C++ 扩展。因此,首先我有一个示例解决方案的变通方法,其中包含 4 个项目,我在这些项目中维护了依赖项。
我的解决方案也已构建。
我通过添加包含托管代码的额外项目对现有解决方案应用相同的过程。以便我在调用项目时启用 CLR(从那里我从现有的 ex:demoproj 调用新添加的项目方法)以及包含 main() 的项目。并将运行时从/mtd(现有的包含/mtd)更改为/mdd。
当我构建 demoproj 时,它完全成功了。但是当我构建包含 main() 的项目时,它会出现很多错误,比如
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)
我发现这是因为使用/clr 选项而发生的,我觉得有什么想法吗???
但是我的测试解决方案没有发生这种情况。如何解决这个问题
非常感谢任何帮助
最佳答案
您使用导入库链接到的所有 dll 必须与您链接到运行时库的方式的应用程序具有相同的设置。错误表明您将运行时作为 .dll
(MSVCRTD) 和 .lib
(LIBCMTD) 混合使用。
关于c++ - 如何在 visual studio 的多个项目下的不同运行时环境中使用 CLR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/955501/