c++ - LNK2001 和 LNK2019 错误 - DirectX 未解析的外部符号

标签 c++ directx linker-errors lnk2019 lnk2001

我正在阅读 Frank D. Luna 所著的《使用 DirectX11 进行 3D 游戏编程简介》一书。当我尝试构建我的项目时,我遇到了这些错误。

>BoxDemo.obj : error LNK2019: unresolved external symbol _D3DX11CompileFromFileW@44 referenced in function "private: void __thiscall BoxApp::BuildFX(void)" (?BuildFX@BoxApp@@AAEXXZ)
>BoxDemo.obj : error LNK2019: unresolved external symbol _D3DX11CreateEffectFromMemory@20 referenced in function "private: void __thiscall BoxApp::BuildFX(void)" (?BuildFX@BoxApp@@AAEXXZ)
>BoxDemo.obj : error LNK2019: unresolved external symbol _DXTraceW@20 referenced in function "private: void __thiscall BoxApp::BuildFX(void)" (?BuildFX@BoxApp@@AAEXXZ)
>d3dApp.obj : error LNK2001: unresolved external symbol _DXTraceW@20
>d3dUtil.obj : error LNK2001: unresolved external symbol _DXTraceW@20
>TextureMgr.obj : error LNK2001: unresolved external symbol _DXTraceW@20
>d3dApp.obj : error LNK2019: unresolved external symbol _D3D11CreateDevice@40 referenced in function "protected: bool __thiscall D3DApp::InitDirect3D(void)" (?InitDirect3D@D3DApp@@IAE_NXZ)
>d3dUtil.obj : error LNK2019: unresolved external symbol _D3DX11CreateTextureFromFileW@24 referenced in function "public: static struct ID3D11ShaderResourceView * __cdecl d3dHelper::CreateTexture2DArraySRV(struct ID3D11Device *,struct ID3D11DeviceContext *,class std::vector<class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class std::allocator<class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > > > &,enum DXGI_FORMAT,unsigned int,unsigned int)" (?CreateTexture2DArraySRV@d3dHelper@@SAPAUID3D11ShaderResourceView@@PAUID3D11Device@@PAUID3D11DeviceContext@@AAV?$vector@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@V?$allocator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@@std@@W4DXGI_FORMAT@@II@Z)
>TextureMgr.obj : error LNK2019: unresolved external symbol _D3DX11CreateShaderResourceViewFromFileW@24 referenced in function "public: struct ID3D11ShaderResourceView * __thiscall TextureMgr::CreateTexture(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >)" (?CreateTexture@TextureMgr@@QAEPAUID3D11ShaderResourceView@@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z)

我必须获取 Effects11.lib 的源代码并为 VS2013 重建它,并且我拥有我所知道的所有内容和链接。不确定如何解决这些问题。

最佳答案

回复:D3D11CreateDevice

您需要添加 d3d11.lib到您的链接库依赖项。一个简单的方法是添加到您的 .cpp 源:

#pragma comment(lib,"d3d11.lib")

回复:D3DX11CompileFromFileW、D3DX11CreateTextureFromFile、D3DX11CreateShaderResourceViewFromFileW

D3DX11 已弃用,它不是 VS 2013 中内置的 Windows 8.1 SDK 的一部分。参见 Where is the DirectX SDK? .

删除 #include <d3dx11.h>d3dx11.lib来自您的链接库依赖项。

添加#include <d3dcompiler.h>d3dcompiler.lib来自您的链接库依赖项。

而不是使用 D3DX11CompileFromFileW , 使用 D3DCompileFromFile .

最新版本Effects 11D3DX11CreateEffectFromFile可以代替 D3DX11CompileFromFileWD3DX11CreateEffectFromMemory因为那可能就是你在那里做的。您可以通过适用于 VS 2013 Win32 桌面应用程序 (fx11_desktop_2013) 的 NuGet 将 Effects 11 添加到您的项目中。

而不是 D3DX11CreateTextureFromFileD3DX11CreateShaderResourceViewFromFileW , 使用 DDSTextureLoader 函数 CreateDDSTextureFromFileCreateWICTextureFromFile来自 DirectX Tool Kit反而。您可以通过 NuGet for VS 2013 ( directxtk_desktop_2013 ) 将 DirectX 工具包 添加到您的项目中。

回复:DXTraceW

获取最新dxerr.cppdxerr.h来自 this发布并将它们添加到您的项目中。

更新:虽然自 2010 年 6 月以来 D3DX9/D3DX10/D3DX11 仍然被弃用并且没有变化,但如果您必须使用它们而不是 alternatives , 你可以使用 Microsoft.DXSDK.D3DX NuGet 包。这包括这些 DLL 的 SHA-256 签名版本和并行部署许可证。参见 this blog post .

关于c++ - LNK2001 和 LNK2019 错误 - DirectX 未解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27914309/

相关文章:

c - gcc 链接器如何在包含文件中工作

javascript - 为什么 wordpress 主题的 css 和 js 文件加载在 head 标签之后?

c++ - 如何正确地对声音阵列进行 FFT?

C++ R - 需要树实现

c++ - 程序在 VS 2013 中有效,但在 .exe 中无效

c++ - DrawIndexedInstanced() 影响其他几何体

c++ - DirectX ID3DXEFFECT::BeginPass()/EndPass() 问题

Android NDK Cmake 链接 .a(静态)库

c++ - 我应该如何在 C++ 中实现线程池?

c++ - OpenGl旋转三角形有一些不好的效果