gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:58:27 24 4
gpt4 key购买 nike

链接器不断显示有关我未在我的应用程序中使用的函数的一堆错误。我唯一做的就是将 header 从 DirectX SDK 更改为 Windows SDK,我还下载了 DirectXTK 包,这样我就可以使用 WICTextureLoader.hDDSTextureLoader.h

以下是一些链接器错误。

错误 LNK2001:未解析的外部符号“union __m128 __vectorcall DirectX::XMVectorMultiply(union __m128,union __m128)”

错误 LNK2001:未解析的外部符号“void __vectorcall DirectX::XMVectorSinCos(union __m128 *,union __m128 *,union __m128)”

错误 LNK2001:未解析的外部符号“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 或更高版本支持的调用约定,如果您的编译器支持,Windows 8.1 SDK 和 Windows 10 SDK 中的 DirectXMath 会使用它。由于 DirectXMath 都是内联的,因此您必须始终如一地确保在同一 EXE 或 DLL 中对 DirectXMath 的所有使用都使用相同版本的 header 和相同版本的编译器。

这就是为什么 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.

关于c++ - 链接器给出了一个我根本没有在我的应用程序中使用过的函数的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33723580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com