3

This is completely driving me insane. When I compile my program, I get the following error message:

error LNK2019: unresolved external symbol _D3D11CreateDeviceAndSwapChain@48

I know that I have all of the correct lib / and include directories (x86), and I have tracked the problem down to the fact that if I go to the definition (F12) I get two symbols, one for the DirectXSDK install directory, and one at "c:\Program Files (x86)\Windows Kits\8.0\Include\um".

For the life of me, I have no idea what to do. I have gone through all of the include / exclude directories and I can't get it to resolve, and I don't know what to do. Can anyone help me?

4

3 回答 3

11

我自己遇到了这个错误,并用卢克在他的评论中的建议解决了这个问题。

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

于 2013-08-06T20:09:47.443 回答
7

好的。在疯狂驾驶之前,请检查:

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

    C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86

    C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64

    C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\arm

  • 您从与标头相同的 sdk 链接 lib(在您的源代码中,尝试显式输入路径):

    #include "c:\Program Files (x86)\Windows Kits\8.0\Include\um\header.h"

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

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

  • 尝试带有详细标志的 new #pragma linker(not #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从头开始编写东西。只有#include现在link需要什么,没有别的。尝试重现您的链接器错误以了解它发生的原因并找出如何在您的主应用程序中修复它。

快乐编码!

于 2013-04-24T06:29:39.657 回答
0

重新检查您的 IDE 中的库,并确保您的 IDE 使用的是 Unicode 字符集,并且您正确地使用了 unicode 函数和字符串。此外,检查两次是否将 \lib\x86(或 x64,如果是这种情况)正确添加到项目的库中。

于 2013-04-29T18:27:37.843 回答