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

时间:2015-11-15 18:52:39

标签: c++ linker direct3d direct3d11

链接器一直显示一些关于我在我的应用程序中没有使用过的函数的错误。我唯一做的就是将标题从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中的函数的几次,但链接器显示来自该特定标头的错误..

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  

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

     

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