DirectX11开发 error LNK2019:无法解析的外部符号

在DirectX11开发的时候会遇到这样的错误,然而却找不到出错的地方。自己的几个小时查找和尝试,终于解决了。

调试程序的时候,如果没加部分重要库,一般提示如下:

error LNK2019: 无法解析的外部符号 _D3D11CreateDeviceAndSwapChain@48,该符号在函数 "***"(?Setup@@YA_NXZ) 中被引用

链接错误:无法解析的外部符号“某个函数”被“某个函数”调用,这个时候你添加对应的库就好了。。。

(1)上面错误是因为,InitDevice(void)函数调用D3D11CreateDeviceAndSwapChain()函数,缺少库,所以,无法识别D3D11CreateDeviceAndSwapChain()函数;
(2)我们从程序中找到D3D11CreateDeviceAndSwapChain()函数;选择D3D11CreateDeviceAndSwapChain,右键“转到定义”。。。发现它是在d3d11.h头文件中,头文件已经包含了,那缺少的只是相应的库,是什么库呢?既然是d3d11,那很自然的联想到d3d11.lib库。。。
(3)从菜单栏开始:项目---属性----配置属性----链接器---输入---附加依赖项,点进去编辑,添加d3d11.lib

(4)这样就告诉程序要引用的库了。

(5)一般这样就行了,如果程序不知道库目录,还要添加库目录。。。上面只是告诉人家名字,还没告诉人家地址。。。只是有的程序知道这个地址,所以不需要添加。
(6)添加库目录:链接器---常规---附加库目录,编辑:把这个库所在的目录添加进去;
如: E:\Microsoft DirectX SDK (June 2010)\Lib\x86

当然有时候:添加了库目录和库名字,但还是出现:
error LNK2019: 无法解析的外部符号 _D3D11CreateDeviceAndSwapChain@48,该符号在函数 "bool __cdecl InitDevice(void)" (?InitDevice@@YA_NXZ) 中被引用
这个问题搞了我挺长时间。吐血经验。后面发现:
我附加库目录有两个库目录1:
E:\C_C++\DirectX\Lib\x86
E:\C_C++\DirectX\Lib\x64
有时候排列顺序却是2:
E:\C_C++\DirectX\Lib\x64
E:\C_C++\DirectX\Lib\x86
我们的窗口程序一般是 win32程序,应该用
E:\Microsoft DirectX SDK (June 2010)\Lib\x86
如果是用2那样顺序,就先进入x64,和 win32 不符合。。。但程序又不会往下找x86的,所以还是会出现那个错误的。。。
其实只要用E:\Microsoft DirectX SDK (June 2010)\Lib\x86 就行了。

一般情况下出现LNK2019错误会是以下原因:

(1)头文件缺少,会提示某个函数无法识别,这时需要你去查找这个函数对应的头文件,然后从菜单栏开始:项目---属性----配置属性----c/c++---常规---附加包含目录:编辑添加头文件所在的目录

(2)在文件的开始部分#include" 头文件“,就行了。。。

(3)有时候你添加的头文件目录如:E:\C_C++\DirectX,但是头文件却在它的下一级inc文件夹中。。。那就应该写成#include"inc/头文件.h",就是把剩下的地址也写上。(记住很有用,因为你不可能把所有的头文件目录都写上去,写上相同的目录部分就行了)
(4)包含其它文件也是一样的,操作如上。

你可能感兴趣的:(DirectX11开发 error LNK2019:无法解析的外部符号)