ucrtd.lib和msvcrtd.lib中都定义了__crt_debugger_hook?

时间:2016-03-01 22:15:07

标签: c++ visual-studio-2015

我正在将原生C ++ Visual Studio 2010项目转换为Visual Studio 2015,并且在修复了一堆其他内容后,我终于处于链接阶段,但是出现以下错误失败< / p>

ucrtd.lib(ucrtbased.dll) : error LNK2005: __crt_debugger_hook already defined in msvcrtd.lib(utility_desktop.obj)

认为它可能是C运行时库不匹配我回去并使用VS2015和/ MDd开关重新编译所有依赖项以控制使用的运行时。那并没有解决任何问题。

根据dumpbin,符号__crt_debugger_hook在两个库中,但它只出现在msvcrtd.lib中的符号表中。

我的解决方案中还有其他可执行文件与ucrtd.lib和msvcrtd.lib链接但尚未遇到此问题。确实遇到链接失败的可执行文件也与MFC和BCG有关,但我不知道这可能是什么原因。

是否有人对可能导致此问题的原因有任何其他想法?

2 个答案:

答案 0 :(得分:5)

事实证明,这个错误不在微软的库中。相反,它位于Crypto ++(https://www.cryptopp.com/)库中。他们转发声明_crt_debugger_hook的方式与Microsoft在将c-runtime拆分为ucrtd.lib和msvrtd.lib时所做的更改不兼容。违规行是第21行的fipstest.cpp:

extern "C" {_CRTIMP void __cdecl _CRT_DEBUGGER_HOOK(int);}

需要移除_CRTIMP,以便您拥有

extern "C" {void __cdecl _CRT_DEBUGGER_HOOK(int); }

我已经用Crypto ++人员打开了拉取请求来修复此问题(https://github.com/weidai11/cryptopp/pull/151)。

答案 1 :(得分:0)

在花了一些时间来回与MS技术支持后,听起来这是VS2015中的一个错误。他们无法向我提供有关修复何时可用的任何信息,但我可以说VS2015的更新1或2都没有修复。