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

问题描述 投票:0回答:3

我正在尝试编译 apitest..

克隆并

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

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

error LNK2019: unresolved external symbol _CrtDbgReport referenced in function _CRT_RTC_INIT

睁大眼睛,他们说要切换

项目属性 -> 配置属性 -> 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   

这个 answer 表示该项目仅与 C 运行时 (CRT) 库的一部分链接,

msvcrtd.lib
。我还需要链接库
vcruntimed.lib
ucrtd.lib

很好,但是怎么样?

apitest是一个基于许多项目的解决方案,我想我必须手动添加一些东西到SDL2中。我尝试了很多尝试,特别是在链接器 -> 输入 -> 附加依赖项下,但我从未让它工作

我在

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社区版

c++ linker visual-studio-2015
3个回答
14
投票

就我而言,这是因为在项目的运行时库选项中,我在调试中使用了

/MD
而不是
/MDd
,因此它在发布中构建得很好,但在调试中则不然。

同样,如果您选择了

/MT
而不是
/MTd


12
投票

如果您最终来到这里是因为您在 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)

4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.