我在 DirectX 项目中加载预编译的 HLSL 着色器时遇到了一个令人沮丧的问题。我正在使用 Visual Studio 2012 Professional 和 DirectX SDK(2010 年 6 月)。下面的代码导致了 LNK2019 的链接错误:未解析的外部符号 _D3DReadFileToBlob@8。
#include "GameBase.h"
#include<D3Dcompiler.h>
bool GameBase::LoadShaderFromFile(LPCWSTR filePath, ID3DBlob** buffer)
{
HRESULT result = D3DReadFileToBlob(filePath, buffer);
if(FAILED(result))
{
return false;
}
return true;
}
库 d3d11.lib;d3dx11.lib;dxerr.lib;D3dcompiler.lib 在 Linker > Input > Additional Dependencies 中设置,并为 DirectX SDK 位置设置正确的包含目录和库目录:$(IncludePath);$ (DXSDK_DIR)Include 和 $(LibraryPath);$(DXSDK_DIR)Lib\x86) 分别。
删除这部分代码可以让项目的其余部分顺利编译和运行(除了不加载着色器的明显例外)。
我觉得我一定遗漏了一些微妙的东西,但我通过搜索和 Stack Overflow 没有找到任何关于如何解决这个问题的见解。