使用MinGW时提示DirectX头文件找不到的问题求助
解决MinGW编译C++时找不到DirectX头文件(d3dx11.h等)的问题
首先得把问题根源说透:d3dx11.h、d3dx10.h这些头文件属于微软已弃用的旧版DirectX SDK(最后一个包含这些文件的是2010年6月版),MinGW默认不会自带这套旧SDK的头文件和库,而且现在的Windows SDK里也已经移除了D3DX系列的内容——这就是你编译报错的核心原因。
下面给你两种解决方案,按需选择:
方案1:坚持使用D3DX旧接口(不推荐,但可实现)
如果你一定要保留这些旧的D3DX库调用,按以下步骤操作:
- 下载最后一版包含D3DX的DirectX SDK:也就是DirectX SDK (June 2010),安装到本地(比如默认路径
C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)) - 配置Sublime Text的编译系统,让MinGW能定位到这些头文件和库:
- 打开Sublime Text,点击
Tools > Build System > New Build System - 粘贴下面的配置代码(注意替换成你实际的SDK安装路径,32/64位系统要对应库路径):
{ "cmd": ["g++.exe", "-std=c++17", "${file}", "-o", "${file_base_name}.exe", "-I", "C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)/Include", "-L", "C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)/Lib/x86", "-ld3d11", "-ld3dx11", "-ld3dx10", "-luser32"], "selector": "source.c++", "shell": true } - 保存为
MinGW-DirectX.sublime-build,之后编译时选择这个构建系统即可
- 打开Sublime Text,点击
方案2:改用现代DirectX接口(推荐)
微软早就弃用了D3DX库,现在推荐使用更现代的替代方案,兼容性更好,也更适配MinGW:
- 先移除代码里的
d3dx11.h、d3dx10.h,只保留d3d11.h和windows.h这类基础头文件 - 功能替代方案:
- 矩阵、向量等数学运算:用Windows SDK自带的
DirectXMath.h(MinGW只要配置了Windows SDK路径就能找到) - 纹理、模型加载等功能:使用DirectXTex或DirectXTK,这两个库可以直接获取源码编译,或者用包管理器(比如vcpkg)安装到MinGW环境中
- 矩阵、向量等数学运算:用Windows SDK自带的
- 配置MinGW的Windows SDK路径:如果你的MinGW版本较新,已经自带部分Windows SDK头文件,但如果不全,可以在编译参数里添加Windows SDK的Include路径,比如:
(路径里的版本号要替换成你本地安装的Windows SDK版本)-I "C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/um"
最后补个小提示:MinGW对DirectX的支持不如MSVC完善,如果后续遇到奇怪的兼容性问题,考虑切换到Visual Studio社区版(免费),它对DirectX的支持会更全面。
内容的提问来源于stack exchange,提问作者Ro-Bert




