这完全让我疯狂。当我编译我的程序时,我收到以下错误消息:
错误LNK2019:未解析的外部符号_D3D11CreateDeviceAndSwapChain @ 48
我知道我拥有所有正确的lib /并包含目录(x86),并且我已经跟踪了这个问题,如果我转到定义(F12),我得到两个符号,一个用于DirectXSDK安装目录,一个在“c:\ Program Files(x86)\ Windows Kits \ 8.0 \ Include \ um”。
对于我的生活,我不知道该怎么做。我已经浏览了所有包含/排除目录,我无法解决它,我不知道该怎么做。任何人都可以帮助我吗?
答案 0 :(得分:7)
我自己遇到了这个错误,并在他的评论中用Luke的建议解决了这个问题。
假设您正在使用Visual Studio,请尝试打开项目的属性窗口,然后导航到Linker - >输入。在“其他附属关系”下添加d3d11.lib
,然后再次尝试关联。
答案 1 :(得分:6)
好。在开车疯狂之前,请查看:
你链接到与你的app相同的架构: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")
检查libs本身是否正常(存在,没有损坏):卸载旧的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
内容。只有#include
和link
现在需要什么,没有别的。尝试重现链接器错误以了解其发生的原因并找出如何在主应用程序中修复它。
快乐的编码!
答案 2 :(得分:0)
重新检查IDE的libs并确保您的IDE使用Unicode字符集,并且您正在使用unicode函数和字符串。 另外,如果\ lib \ x86(如果是这种情况,则为x64)检查两次,是否已正确添加到项目的库中。