我正在尝试编译 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社区版
就我而言,这是因为在项目的运行时库选项中,我在调试中使用了
/MD
而不是 /MDd
,因此它在发布中构建得很好,但在调试中则不然。
同样,如果您选择了
/MT
而不是 /MTd
。
如果您最终来到这里是因为您在 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)
这似乎是 SDL 问题。 Here是 SDL 论坛中关于它的讨论,基本上有以下解决方案 - 添加您提到的库,采用适当的 VS2015 版本构建(线程中有一个链接)或从源构建 SDL(线程提到这也应该有效)。