在我从旧版DirectX SDK更改为Windows SDK(Visual Studio 2015)后,链接器一直在抱怨

The linker keeps complaining after I changed from legacy DirectX SDK to Windows SDK (Visual Studio 2015))

本文关键字:SDK 2015 链接 一直 Studio DirectX Windows Visual      更新时间:2023-10-16

我刚刚删除了DirectX SDK中包含的所有标头,并转向了Windows SDK,但一旦删除,链接器就会不断抱怨"未解析的外部符号"。链接器显示了大约24个错误,其中大多数错误是关于我甚至没有在游戏中使用的函数。

链接器错误:error LNK2001: unresolved external symbol "union __m128 __vectorcall DirectX::XMVectorMultiply(union __m128,union __m128)

error LNK2001: unresolved external symbol "union __m128 __vectorcall DirectX::XMVectorSubtract(union __m128,union __m128)

error LNK2001: unresolved external symbol "union __m128 __vectorcall DirectX::XMVector3Normalize(union __m128)

error LNK2001: unresolved external symbol "union __m128 __vectorcall DirectX::XMVectorSet(float,float,float,float)

我在应用程序中没有使用XMVector3Normalize()XMVectorSubtract()XMVectorMultiply(),但我使用了XMVectorSet()

这些函数中的大多数都是DirectXMath.h的一部分,所以这里可能有什么问题。

无论如何,我不知道这是否会有所帮助,但下面是我在应用程序中使用的所有标题。

#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数学库在标题中完全定义;没有可链接的库。它们的定义在DirectXMath.h包含的各种DirectX Math .inl文件中。

换句话说,您几乎不可能包含声明这些函数的头文件,而而不是获得它们的实现。

由于我不在你的电脑旁,我无法确切地告诉你是什么导致了这种情况。要确定实际原因,您应该将问题简化为再现问题的尽可能小的程序,例如创建一个仅包含DirectXMath.h的新项目,并使用函数XMVectorMultiply执行矢量乘法并打印结果。

一旦你让这个简单的程序工作起来,然后将它与你的程序进行比较,看看差异,找出错误的根源。

这与您在运行时调试应用程序时所经历的过程相同,只是您在调试构建而不是应用程序。