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

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

本文关键字:错误 函数 应用程序 一个 Linker      更新时间:2023-10-16

链接器不断显示一堆关于我在应用程序中未使用的函数的错误。我所做的唯一一件事就是将头从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()。我已经在我的项目中链接了适当的库和头,但这仍然不能解决问题。是什么原因导致了这些链接器错误?

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

以下只是我代码的一部分(我没有包括所有代码,因为我有大约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中使用函数的少数几次,但链接器显示来自该特定标头的错误。。

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

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

这也是DirectX工具包提供编译器特定的vcxproj文件以确保其保持同步的原因之一。

由于您的项目以前使用的是旧版DirectX SDK,您可能有一些延迟的预处理器宏和VC++目录设置需要清理。您可以尝试使用 DirectXTK_Desktop_2015.vcxprojvcxproj文件进行差异处理。

如果使用/arch:IA32/arch:SSE而不是用于DirectX工具包库构建的/arch:SSE2构建x86配置,也可能会出现问题。

如果您试图在项目中使用与DirectX工具包的构建方式不匹配的_XM_NO_INTRINISCS_,也可能发生类似的不匹配。