LNK2019 未解析的外部符号 _CrtDbgReport 在函数 _CRT_RTC_INIT SDL2 中引用

ele*_*ect 8 c++ linker visual-studio-2015

我正在尝试编译apitest ..

克隆并cmake -G "Visual Studio 14 2015 Win64" ..按照指示,一切正常

第一个问题,很多这样的,我什至没有得到错误列表:

error LNK2019: unresolved external symbol _CrtDbgReport referenced in function _CRT_RTC_INIT
Run Code Online (Sandbox Code Playgroud)

目瞪口呆,他们说要切换

项目属性 -> 配置属性 -> C/C++ -> 代码生成 -> 运行时库

从多线程 DLL 到多线程调试 DLL

好的,我再次尝试构建,它再次失败,但至少这次我得到了错误列表..

再说一次我的朋友:

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol _CrtDbgReport referenced in function _CRT_RTC_INIT   SDL2    C:\Users\GBarbieri\Documents\Visual Studio 2015\Projects\apitest\_out\thirdparty\SDL2-2.0.1\MSVCRTD.lib(_init_.obj) 1   
Run Code Online (Sandbox Code Playgroud)

答案表示该项目仅与 C 运行时 (CRT) 库的一部分相关联,msvcrtd.lib. 我还需要链接库vcruntimed.libucrtd.lib.

很好,但如何?

apitest 是一个基于很多项目的解决方案,我想我必须手动在 SDL2 中添加一些东西。我尝试了很多尝试,尤其是在 Linker -> Input -> Additional Dependencies 下,但我从来没有让它工作

我在msvcrtd.lib下面找到了C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib尽管我猜解决方案正在尝试构建自己的解决方案。

vcruntimed.lib在与msvcrtd.lib. 而是ucrtd.lib位于C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64

提前致谢..

Ps:我有VS15社区版

小智 12

就我而言,这是因为在我在调试中使用的项目的运行时库选项中,/MD而不是/MDd在发布中构建得很好,但在调试中则不然


Dar*_*rin 6

如果您因为 Google 搜索“错误 LNK2001:无法解析的外部符号 __CrtDbgReport”而最终来到这里,这里有一个简单的检查方法...

如果您将工作 DEBUG 与非工作 RELEASE 项目设置进行比较并在它们之间进行复制/粘贴,则很容易错误地将预处理器定义“_DEBUG”复制到 RELEASE 项目中。在一次快速而草率的剪切和粘贴之后,我只是追了两个令人沮丧的小时……看看下面找到它需要多长时间:

WIN32_LEAN_AND_MEAN;WIN32;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
Run Code Online (Sandbox Code Playgroud)


Rud*_*lis 4

这似乎是一个 SDL 问题。是 SDL 论坛中关于它的讨论,基本上有以下解决方案 - 添加您提到的库,采取适当的 VS2015 版本构建(线程中有一个链接)或从源构建 SDL(线程提到应该也工作)。