You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用MinGW时提示DirectX头文件找不到的问题求助

解决MinGW编译C++时找不到DirectX头文件(d3dx11.h等)的问题

首先得把问题根源说透:d3dx11.hd3dx10.h这些头文件属于微软已弃用的旧版DirectX SDK(最后一个包含这些文件的是2010年6月版),MinGW默认不会自带这套旧SDK的头文件和库,而且现在的Windows SDK里也已经移除了D3DX系列的内容——这就是你编译报错的核心原因。

下面给你两种解决方案,按需选择:

方案1:坚持使用D3DX旧接口(不推荐,但可实现)

如果你一定要保留这些旧的D3DX库调用,按以下步骤操作:

  1. 下载最后一版包含D3DX的DirectX SDK:也就是DirectX SDK (June 2010),安装到本地(比如默认路径C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)
  2. 配置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,之后编译时选择这个构建系统即可

方案2:改用现代DirectX接口(推荐)

微软早就弃用了D3DX库,现在推荐使用更现代的替代方案,兼容性更好,也更适配MinGW:

  • 先移除代码里的d3dx11.hd3dx10.h,只保留d3d11.hwindows.h这类基础头文件
  • 功能替代方案:
    • 矩阵、向量等数学运算:用Windows SDK自带的DirectXMath.h(MinGW只要配置了Windows SDK路径就能找到)
    • 纹理、模型加载等功能:使用DirectXTexDirectXTK,这两个库可以直接获取源码编译,或者用包管理器(比如vcpkg)安装到MinGW环境中
  • 配置MinGW的Windows SDK路径:如果你的MinGW版本较新,已经自带部分Windows SDK头文件,但如果不全,可以在编译参数里添加Windows SDK的Include路径,比如:
    -I "C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/um"
    
    (路径里的版本号要替换成你本地安装的Windows SDK版本)

最后补个小提示:MinGW对DirectX的支持不如MSVC完善,如果后续遇到奇怪的兼容性问题,考虑切换到Visual Studio社区版(免费),它对DirectX的支持会更全面。

内容的提问来源于stack exchange,提问作者Ro-Bert

火山引擎 最新活动