我刚刚删除了 DirectX SDK 中包含的所有 header ,然后转向 Windows SDK,但是一旦我这样做,链接器就会不断提示“未解析的外部符号”。链接器显示大约 24 个错误,其中大部分错误与我什至没有在我的游戏中使用的函数有关。
链接器错误:
错误 LNK2001:未解析的外部符号“union __m128 __vectorcall DirectX::XMVectorMultiply(union __m128,union __m128)”
错误 LNK2001:未解析的外部符号“union __m128 __vectorcall DirectX::XMVectorSubtract(union __m128,union __m128)”
错误 LNK2001:未解析的外部符号“union __m128 __vectorcall DirectX::XMVector3Normalize(union __m128)”
错误 LNK2001:未解析的外部符号“union __m128 __vectorcall DirectX::XMVectorSet(float,float,float,float)”
我没有在我的应用程序中使用 XMVector3Normalize()
、XMVectorSubtract()
和 XMVectorMultiply()
,但我确实使用了 XMVectorSet()
.
这些函数中的大部分都是 DirectXMath.h
的一部分,所以这里可能有什么问题。
无论如何,我不知道这是否有帮助,但下面是我在我的应用程序中使用的所有 header 。
#include <windows.h>
#include <D3D11.h>
#include <dinput.h>
#include <SimpleMath.h>
#include <D3Dcompiler.h>
#include <sstream>
#include <SpriteFont.h> //This file also includes DirectXMath.h
#include <DDSTextureLoader.h>
#include <WICTextureLoader.h>
#pragma comment (lib, "D3D11.lib")
#pragma comment (lib, "dinput8.lib")
#pragma comment (lib, "dxguid.lib")
#pragma comment (lib, "d3dcompiler.lib")
最佳答案
“未解析的符号”意味着您直接调用这些函数,或者它们被您正在调用的函数调用。您调用的函数必须由您编译并链接到您的应用程序的源代码定义,或者它们必须由您链接到您的应用程序的库定义。
DirectX Math 库完全在头文件中定义;没有可链接的库。它们的定义在各种 DirectX Math .inl
中。 DirectXMath.h
包含的文件.
换句话说,您几乎不可能包含声明这些函数的头文件并且不获得它们的实现。
因为我不在你的电脑前,所以我无法确切地告诉你你做了什么导致了这种情况。要确定实际原因,您应该将问题简化为能够重现问题的最小程序,例如创建一个仅包含 DirectXMath.h
的新项目。并使用函数 XMVectorMultiply
执行 vector 乘法并打印结果。
一旦你让这个简单的程序运行起来,然后将它与你的程序进行比较并查看差异以找到错误的根源。
这与您在运行时调试应用程序时经历的过程相同,只是您调试的是构建而不是应用程序。
关于c++ - 在我从旧版 DirectX SDK 更改为 Windows SDK(Visual Studio 2015)后,链接器一直在提示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33712488/