我在DirectX项目中加载预编译的HLSL着色器时遇到了令人沮丧的问题。我正在使用Visual Studio 2012专业版和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,并为DirectX SDK位置设置了正确的包含目录和库目录:$(IncludePath) ; $(DXSDK_DIR)Include和$(LibraryPath); $(DXSDK_DIR)Lib \ x86)。
删除代码的这部分内容可以使项目的其余部分得以编译和运行,而不会发生意外(明显的例外是着色器不会加载)。
[我觉得我一定会遗漏一些细微的东西,但是通过搜索和堆栈溢出所发现的任何东西都未对如何解决此问题产生任何见解。
也许您的混合库与Windows 8 SDK也具有这些库。更改您的链接设置以查看随附的库,并验证d3dcompiler.lib来自何处,或是否完全链接到它。
因此,如果使用Windows套件,您将不再包含d3dx11.lib
,但是您可以包含(通常)可以在其中找到的d3dcompiler.lib
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64
或您使用的任何内部版本,