在Visual Studio 2012中调用D3DReadFileToBlob会导致链接错误

问题描述 投票:0回答:3

我在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)。

删除代码的这部分内容可以使项目的其余部分得以编译和运行,而不会发生意外(明显的例外是着色器不会加载)。

[我觉得我一定会遗漏一些细微的东西,但是通过搜索和堆栈溢出所发现的任何东西都未对如何解决此问题产生任何见解。

visual-studio-2012 directx directx-11
3个回答
1
投票

您的问题是,您以某种方式混合使用Windows 8.x SDK和DirectX SDK,而您正在使用D3DCompile的较旧版本,该版本不支持D3DReadFileToBlob。

如果将VS2012 / Windows 8.0 SDK或VS2013 / Windows 8.1 SDK与旧版DirectX SDK结合使用,则需要修改include / lib路径以获得“正确”的行为。在MSDN上有详细介绍。

您还应该阅读有关D3DCompile,DLL部署和版本控制的blog条目。


0
投票

也许您的混合库与Windows 8 SDK也具有这些库。更改您的链接设置以查看随附的库,并验证d3dcompiler.lib来自何处,或是否完全链接到它。


0
投票

因此,如果使用Windows套件,您将不再包含d3dx11.lib,但是您可以包含(通常)可以在其中找到的d3dcompiler.libC:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64或您使用的任何内部版本,

© www.soinside.com 2019 - 2024. All rights reserved.