链接器给出了一个我根本没有在我的应用程序中使用过的函数的错误

Linker gives errors about a function that i have not used in my application at all

链接器一直显示关于我在我的应用程序中没有使用的函数的一堆错误。我所做的唯一一件事就是将 headers 从 DirectX SDK 更改为 Windows SDK,并且我还下载了 DirectXTK 包,这样我就可以使用 WICTextureLoader.hDDSTextureLoader.h

以下是一些链接器错误。

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

error LNK2001: unresolved external symbol "void __vectorcall DirectX::XMVectorSinCos(union __m128 *,union __m128 *,union __m128)

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

我不确定这里发生了什么。我在我的应用程序中根本没有调用 XMVectorMultiply()XMVectorSinCos()。我已经在我的项目中链接了适当的库和 header,但这仍然不能解决问题。是什么导致了这些链接器错误?

(如果您需要更多相关信息,请询问)

下面只是我的部分代码(我没有包括所有代码,因为我有大约 2000 行代码):

#pragma comment (lib, "dinput8.lib")
#pragma comment (lib, "dxguid.lib")
#pragma comment (lib, "D3D11.lib")
#pragma comment (lib, "d3dcompiler.lib")

#include <windows.h>    
#include <D3D11.h>                      
#include <dinput.h> 
#include <D3Dcompiler.h>
#include <sstream>
#include <SimpleMath.h>
#include <DirectXMath.h>
#include <DDSTextureLoader.h>
#include <WICTextureLoader.h>
#include <SpriteBatch.h>
#include <SpriteFont.h> 

void Create_Camera_View_Space()
{

camPosition = DirectX::XMVectorSet(0.0f, 2.0f, -12.5f, 0.0f);
camDirection = DirectX::XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f);
camUp = DirectX::XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);



CameraView = DirectX::XMMatrixLookAtLH(
                        camPosition,    
                        camDirection,   
                        camUp           
                        );
}


void Create_Camera_Projection_Space()
{
CameraProjection = DirectX::XMMatrixPerspectiveFovLH(
                                    0.4f * 3.14f,       
                                    (float)400 / 400,   
                                    1.0f,               
                                    10000.0f            
                                    );          

}


void Create_World_Space_for_Ground()
{   
DirectX::XMMATRIX Translation; 
DirectX::XMMATRIX Rotation;     
DirectX::XMMATRIX Scale;
DirectX::XMMATRIX Input_Rotation_X;
DirectX::XMMATRIX Input_Rotation_Z;


GroundWorld = DirectX::XMMatrixIdentity();


Scale = DirectX::XMMatrixScaling(500.0f, 10.0f, 500.0f);


Translation = DirectX::XMMatrixTranslation(0.0f, 10.0f, 0.0f);

GroundWorld = Scale * Translation;


}

这是我几次使用 DirectXMath.h 中的函数,但链接器显示来自特定 header..

的错误

这里最有可能的问题是您正在使用不同的设置、编译器或路径构建有问题的各种库。

__vectorcall 是 VS 2013 或更高版本支持的调用约定,如果您的编译器支持,DirectXMath 在 Windows 8.1 SDK 和 Windows 10 SDK 中使用.由于 DirectXMath 都是内联的,因此您必须始终如一地确保在同一 EXE 或 DLL 中对 DirectXMath 的所有使用都使用相同版本的 headers 和相同版本的编译器。

这是 DirectX Tool Kit 提供特定于编译器的 vcxproj 文件以确保其保持同步的原因之一。

由于您的项目之前使用的是旧版 DirectX SDK,因此您可能有一些挥之不去的预处理器宏和 VC++ 目录设置需要清理。您可以尝试使用 DirectXTK_Desktop_2015.vcxproj.

vcxproj 文件进行比较

You can also have problems if you are building your x86 config with /arch:IA32 or /arch:SSE rather than /arch:SSE2 which is what is used for the DirectX Tool Kit library builds.

A similar mismatch can happen if you try to use _XM_NO_INTRINISCS_ in your project which does not match how DirectX Tool Kit is built.