D3D11CreateDeviceAndSwapChain 未解决的外部

Posted

技术标签:

【中文标题】D3D11CreateDeviceAndSwapChain 未解决的外部【英文标题】:D3D11CreateDeviceAndSwapChain Unresolved External 【发布时间】:2013-04-24 02:02:43 【问题描述】:

这完全把我逼疯了。当我编译我的程序时,我收到以下错误消息:

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

我知道我拥有所有正确的 lib / 和包含目录 (x86),并且我已将问题归结为以下事实:如果我转到定义 (F12) 我会得到两个符号,一个用于 DirectXSDK安装目录,一个在“c:\Program Files (x86)\Windows Kits\8.0\Include\um”。

对于我的一生,我不知道该怎么做。我已经浏览了所有的包含/排除目录,但我无法解决它,我不知道该怎么办。谁能帮帮我?

【问题讨论】:

可能是因为这些库有不同的编译标志。 您确定要链接到 D3d11.lib?打开详细链接。 【参考方案1】:

我自己也遇到了这个错误,并通过 Luke 在评论中的建议解决了它。

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

【讨论】:

另外你可以把#pragma comment(lib, "d3d11.lib") 放在你的引擎头文件中。 工作就像一个魅力。谢谢! 这是 Visual Studio 2017 Enterprise 在最新的 Windows 10 内部版本上的解决方案。 (将 d3d11.lib 添加到附加依赖项)【参考方案2】:

好的。在发疯之前,请检查:

您链接到与您的应用相同的架构: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 中复制某处的文档和教程,卸载它并完全忘记它)

尝试带有详细标志的新#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 现在需要什么,没有别的。尝试重现您的链接器错误以了解它发生的原因并找出如何在您的主应用程序中修复它。

编码愉快!

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于D3D11CreateDeviceAndSwapChain 未解决的外部的主要内容,如果未能解决你的问题,请参考以下文章

使用 D3D11CreateDeviceAndSwapChain?

D3D11:从 6 个图像创建立方体贴图

D3D11CreateDeviceAndSwapChain 未解决的外部

D3D11:如何将 GDI 文本绘制到 GXDI 表面? (没有 D2D)

在 D3D11 中将纹理预加载到 GPU 内存

D3D11笔记——Resource基本概念