2
1>------ Build started: Project: Setup, Configuration: Debug Win32 ------
1>BoxDemo.obj : error LNK2019: unresolved external symbol _D3DX11CreateEffectFromMemory@24 referenced in function "private: void __thiscall BoxApp::BuildFX(void)" (?BuildFX@BoxApp@@AAEXXZ)
1>C:\Users\Josh\Documents\Game Institute\DirectX\Chapter 1\Projects\Setup\Debug\Setup.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我正在使用 VS2012 并尝试使用 Frank D Lunas DX11 书中的示例程序设置 DX11。我不知道此错误消息是什么意思,任何帮助将不胜感激。


1>------ Build started: Project: Setup, Configuration: Debug Win32 ------
1>Effects11d.lib(EffectAPI.obj) : error LNK2019: unresolved external symbol _D3DCompileFromFile@36 referenced in function _D3DX11CompileEffectFromFile
1>C:\Users\Josh\Documents\Game Institute\DirectX\Chapter 1\Projects\Setup\Debug\Setup.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
4

1 回答 1

1

链接器找不到D3DX11CreateEffectFromMemory函数的定义。该函数是Effects11框架的一部分。你需要链接Effects11.lib来构建这个程序。

以前,要开发 DirectX 应用程序,您必须已安装DirectX SDK。现在,独立的 DirectX SDK 涉及遗留问题,现在它是Windows SDK的一部分(从 8.0 版开始)。安装 Visual Studio 2012 时,您已经得到它。

现在的问题是这个 SDK 版本不包括 Effect11 框架等。

有几种方法可以解决此问题:

  1. 下载并安装旧版 DirectX SDK。编译时会收到一些警告,因为旧的 DirectX SDK 和新的 Windows SDK 冲突。要解决此问题,您可以将项目切换到v110xp工具集或安装Windows 7 SDK并切换到v100项目选项。
  2. 对于这个示例程序,Luna 先生将编译好的库包含在Common源代码存档文件夹中。但我不确定它是否适用于 Win8 SDK。
  3. 更正源代码并去掉 Effect11 的东西。如果你只是学习 DirectX,那可不是一件容易的事。

Chuck Walbourn - MSFT 的更多解释:

于 2013-05-20T10:19:34.423 回答