VS2017下解决:无法解析的外部符号___vsnprintf
说明:在VS2015上编译DirectX提供的sample时遇到了如下错误提示
LNK2001 无法解析的外部符号 __vsnwprintf SimpleSample11 C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D11\SimpleSample11\dxerr.lib(dxerrw.obj)
遂将网上查到的部分资料总结如下
解决方案有两种:
1、直接在项目的链接库--》输入--》附加依赖项中添加 legacy_stdio_definitions.lib
2、在报错的源文件中添加如下编译预处理指令
#pragma comment(lib, "legacy_stdio_definitions.lib")
报错原因
vs2015设计将许多原来的标准库改为内联方式,而内联函数对dll或lib来说是不可见的,因而没有可以链接的标准库文件,所以要专门添加标准库文件来链接标准库中的函数,也就是 legacy_stdio_definitions.lib 。有很多Windows 8 SDK依赖于这些在新的运行库中已经内联化的方法,而目前看来使用 legacy_stdio_definitions.lib 能够弥补大多数该更改遗留下的问题。来自Microsoft的工作人员称,他们会在最终的VS2015发行版中更新Windows SDK以彻底解决这一问题。