【发布时间】:2015-11-07 13:36:24
【问题描述】:
我正在尝试编译一些代码以在不属于我的应用程序的窗口上呈现内容。我想使用 DirectX 9 来实现这一点,但由于某种原因,链接器错误现在正在扼杀我。
我将我的所有库都包含在一个 .h 文件中(参见下面的 main.h)。
现在我将这个 .h 文件包含在我拥有的每个其他 .h 文件中,以便在任何地方使用它。有时我只包含一个包含我的主文件的 .h 文件。
现在的问题是,当我去任何我想在其中使用 DirectX 的课程(包含 .h 文件)时,我得到了 LNK2019 错误。
auto hResult = Direct3DCreate9Ex( D3D_SDK_VERSION, &this->m_pDirect3D9Ex );
Direct3DCreate9Ex 出错
对应的.h文件包含主.h文件,方式如下:
#ifdef _MSC_VER
#pragma once
#endif
#include "main.h"
main.h(完整):
#pragma once
#endif
#include <Windows.h>
#include <iostream>
#include <vector>
#include <memory>
#include <chrono>
#include <thread>
#include <d3d9.h>
#include <d3dx9.h>
#include <dwmapi.h>
#pragma comment( lib, "d3d9.lib" )
#pragma comment( lib, "d3dx9.lib" )
#pragma comment( lib, "dwmapi.lib" )
#endif
这甚至在使用 VisualStudio 编译时也有效,但我需要使用 cl.exe 来实现。当我将所有内容移出 VisualStudio 后尝试构建它时,会出现未解决的符号错误。
如果我能得到任何帮助,我将不胜感激,因为我已经在这方面浪费了很多时间。
编辑:错误
【问题讨论】:
-
当然 :) 如您所见,按照您之前的要求,我将我的问题重新表述得更准确
-
在尝试编译和链接之前,您是否为编译器运行了 setup .bat 文件?您需要确保您有正确的库路径设置。 vcvars32.bat 还是类似的?你用什么命令编译和链接?
-
cl.exe /I"%DXSDK_DIR%\Include" /EHsc /Od /MT *.cpp d3dx9.lib d3d9.lib dwmapi.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /link /FORCE:MULTIPLE /LIBPATH:"%DXSDK_DIR%\Lib\x64\" /SUBSYSTEM:CONSOLE /OUT:PH.exe
-
@JJF 如果找不到库,这将给出不同的链接器错误。
-
为什么你的命令行中混合使用了 32 位和 64 位库?