Bre*_*all 1 c++ visual-studio-2015
我正在将本机C ++ Visual Studio 2010项目转换为Visual Studio 2015,并且修复了许多其他问题之后,我终于处于链接阶段,失败并出现以下错误
ucrtd.lib(ucrtbased.dll) : error LNK2005: __crt_debugger_hook already defined in msvcrtd.lib(utility_desktop.obj)
Run Code Online (Sandbox Code Playgroud)
认为这可能是C运行时库不匹配的原因,我回去并使用VS2015和/ MDd开关重新编译了所有依赖项,以控制使用哪个运行时。那没有解决任何问题。
根据dumpbin的说法,该符号同时__crt_debugger_hook存在于两个库中,但仅出现在msvcrtd.lib中的符号表中。
我的解决方案中还有其他可执行文件与ucrtd.lib和msvcrtd.lib链接,但不会遇到此问题。遇到链接故障的可执行文件也与MFC和BCG链接,但是我不知道这可能是原因。
是否有人对导致此问题的原因有其他想法?
事实证明,该错误不在Microsoft的库中。相反,它位于Crypto ++(https://www.cryptopp.com/)库中。他们_crt_debugger_hook以与Microsoft将c运行时分割为ucrtd.lib和msvrtd.lib时所做的更改不兼容的方式转发声明。令人反感的行是第21行的fipstest.cpp:
extern "C" {_CRTIMP void __cdecl _CRT_DEBUGGER_HOOK(int);}
Run Code Online (Sandbox Code Playgroud)
在_CRTIMP需要被如此撤职你有
extern "C" {void __cdecl _CRT_DEBUGGER_HOOK(int); }
Run Code Online (Sandbox Code Playgroud)
我已经与Crypto ++的人员打开了拉取请求以解决此问题(https://github.com/weidai11/cryptopp/pull/151)。
| 归档时间: |
|
| 查看次数: |
870 次 |
| 最近记录: |