D3D11CreateDeviceAndSwapChain Unresolved External

D3D11CreateDeviceAndSwapChain Unresolved External

本文关键字:External Unresolved D3D11CreateDeviceAndSwapChain      更新时间:2023-10-16

这简直要把我逼疯了。当我编译程序时,我得到以下错误消息:

错误LNK2019:无法解析的外部符号_D3D11CreateDeviceAndSwapChain@48

我知道我有所有正确的lib/和include目录(x86),并且我已经将问题跟踪到这样一个事实,即如果我去定义(F12),我得到两个符号,一个用于DirectXSDK安装目录,一个在"c:Program Files (x86)Windows Kits8.0 include um"。

无论如何,我都不知道该做什么。我已经通过了所有的包括/排除目录,我不能得到它的解决,我不知道该怎么做。有人能帮我吗?

我自己也遇到了这个错误,并根据Luke在评论中的建议解决了这个问题。

假设您使用的是Visual Studio,请尝试打开项目的属性窗口,然后导航到链接器->输入。在"附加依赖项"下添加d3d11.lib,并再次尝试链接。

好的。在疯狂驾驶之前,看看这个:

  • 您链接到与您的应用程序相同的架构:x86, x64, arm(这是常见的gotcha =))

    C:Program Files (x86)Windows Kits8.0Libwin8umx86

    C:Program Files (x86)Windows Kits8.0Libwin8umx64

    C:Program Files (x86)Windows Kits8.0Libwin8umarm

  • 你从与你的头文件相同的sdk链接库(在你的源代码中,尝试明确地键入路径):

    #include "c:Program Files (x86)Windows Kits8.0Includeumheader.h"

    #pragma comment(lib, "C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64\library.lib")

  • 检查库本身是否正常(存在,未损坏):卸载旧的DXSDK和Win8SDK,然后重新安装其中一个,尝试它,而不是另一个。(这也是一个好主意,只是复制某处文档和教程从旧SDK,卸载它,忘记它)

  • 尝试新的#pragma linker(不是#pragma lib)与详细标志,以获得一些链接器输出:

    #define USE_OLD_DXSDK

    #ifdef USE_OLD_DXSDK

    #pragma comment(linker "c:\path\to\old_sdk\d3d11.lib -verbose")

    #else

    #pragma comment(linker, "c:\path\to\new_sdk\d3d11.lib -verbose")

    #endif

  • 走另一种方式:创建一个新的小应用程序,并尝试从头开始编写D3D11CreateDeviceAndSwapChain的东西。现在只需要#includelink。试着重现你的链接错误,以了解它发生的原因,并找出如何在你的主应用中修复它。

编码快乐!

重新检查您的IDE中的库,并确保您的IDE正在使用Unicode字符集,并且您正在正确使用Unicode函数和字符串。另外,检查两次,如果libx86(或x64,如果它的情况下),被正确添加到您的项目的库。