Linker给出了一个我在应用程序中根本没有使用过的函数的错误
Linker gives errors about a function that i have not used in my application at all
链接器不断显示一堆关于我在应用程序中未使用的函数的错误。我所做的唯一一件事就是将头从DirectX SDK更改为Windows SDK,我还下载了DirectXTK的包,这样我就可以使用WICTextureLoader.h
和DDSTextureLoader.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.vcxproj
对vcxproj
文件进行差异处理。
如果使用
/arch:IA32
或/arch:SSE
而不是用于DirectX工具包库构建的/arch:SSE2
构建x86配置,也可能会出现问题。如果您试图在项目中使用与DirectX工具包的构建方式不匹配的
_XM_NO_INTRINISCS_
,也可能发生类似的不匹配。
- 链接器错误:函数的多个定义
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 错误:函数声明符之后的预期函数体
- C 错误 - 函数不能超载
- 如何修复传递参数时调用错误函数的主函数?(C++)
- 错误:函数调用中有两个参数
- 错误:函数不是“类”的静态数据成员 - C++
- C ,G 编译错误函数
- CMake 解析错误函数缺少结尾")"。而是找到带有文本的未终止字符串")
- C++ 错误 函数 2 的多重定义
- 错误:函数调用中从int到int(*)[4]的转换无效
- C++14 自动扣除错误:函数返回一个数组
- 视觉C++错误:函数必须返回一个值
- 错误:函数声明中的两种或多种数据类型
- 错误:函数未在作用域中声明
- rtw_android.c错误:函数“strnicmp”的隐式声明[-Weror=隐式函数声明]
- 错误:函数中的return语句没有值,返回“void*”[-fpermission]
- 简单程序中的链接器错误:函数的多重定义
- 错误:函数参数太多
- 错误:函数__tmaincrtstartup中引用的未解析的外部符号_main