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以徹底解決這一問題。

參考地址

  1. (VS 2015 CTP 5 C++) _vsnwprintf_s and other functions are not exported in appcrt140.dll, breaking linkage of static libraries
  2. C++: Unresolved external symbol _sprintf and _sscanf in Visual Studio 2015

  3. missing (stdio) identifiers with external linkage

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM