c++ - 在我从旧版 DirectX SDK 更改为 Windows SDK(Visual Studio 2015)后,链接器一直在提示)

标签 c++ linker direct3d11

我刚刚删除了 DirectX SDK 中包含的所有 header ,然后转向 Windows SDK,但是一旦我这样做,链接器就会不断提示“未解析的外部符号”。链接器显示大约 24 个错误,其中大部分错误与我什至没有在我的游戏中使用的函数有关。

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

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

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

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

我没有在我的应用程序中使用 XMVector3Normalize()XMVectorSubtract()XMVectorMultiply(),但我确实使用了 XMVectorSet().

这些函数中的大部分都是 DirectXMath.h 的一部分,所以这里可能有什么问题。

无论如何,我不知道这是否有帮助,但下面是我在我的应用程序中使用的所有 header 。

#include <windows.h>
#include <D3D11.h>                      
#include <dinput.h> 
#include <SimpleMath.h>
#include <D3Dcompiler.h>
#include <sstream>
#include <SpriteFont.h>      //This file also includes DirectXMath.h
#include <DDSTextureLoader.h>
#include <WICTextureLoader.h>

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

最佳答案

“未解析的符号”意味着您直接调用这些函数,或者它们被您正在调用的函数调用。您调用的函数必须由您编译并链接到您的应用程序的源代码定义,或者它们必须由您链接到您的应用程序的库定义。

DirectX Math 库完全在头文件中定义;没有可链接的库。它们的定义在各种 DirectX Math .inl 中。 DirectXMath.h 包含的文件.

换句话说,您几乎不可能包含声明这些函数的头文件并且获得它们的实现。

因为我不在你的电脑前,所以我无法确切地告诉你你做了什么导致了这种情况。要确定实际原因,您应该将问题简化为能够重现问题的最小程序,例如创建一个仅包含 DirectXMath.h 的新项目。并使用函数 XMVectorMultiply执行 vector 乘法并打印结果。

一旦你让这个简单的程序运行起来,然后将它与你的程序进行比较并查看差异以找到错误的根源。

这与您在运行时调试应用程序时经历的过程相同,只是您调试的是构建而不是应用程序。

关于c++ - 在我从旧版 DirectX SDK 更改为 Windows SDK(Visual Studio 2015)后,链接器一直在提示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33712488/

相关文章:

ios - 如何在 Xcode 5 上找到 arm-apple-darwin#-llvm-gcc-4.2 编译器?

Boost:bjam 如何构造库名?

c++ - gcc undefined reference 即使 ld 找到库并且它包含所需的函数

c++ - 在 hlsl 着色器中设置全局参数的正确方法是什么?

directx-11 - RenderTargetView 指向的后缓冲区是否会在 Present 之后自动更改?

c++ - 为什么我不能使用迭代器将 unique_ptr 从集合 move 到函数参数?

c++ - 一个多索引,其中一个索引是整个集合的一个子集

c++ - 结合 boost 范围算法,例如。 boost::copy 和 boost::remove_if

c++ - 断点如何在 C++ 代码中工作?

DirectX 11 : simultaneous use of multiple adaptors