如何在MingW中编译directX教程示例



我搜索了又搜索,没有找到在MingW下编译directX的方法,我看到了其他人的成功,并试图复制它,但没有成功。我已经读过这个类似的问题,但它没有帮助,所以请不要直接告诉我:如何在MinGW中编译DirectX 11应用程序。

很长一段时间以来,我一直试图让MingW与directX合作,以下是我失败的尝试列表,以及我读到的对其他人有效的内容:

  • 下载MSVC标题并让MingW使用它们
  • 下载MingW-W64并使用它进行编译
  • 下载Reubens MingW-W64并使用它进行编译
  • 下载最新的MingW编译器并使用它
  • 下载TDM-GCC并使用它
  • 不顾一切地混合编译器头以消除错误

我听说,如果我只是将directX标头转储到适当的位置,我至少应该能够在链接器阶段失败,但即使在我这样做之后,我也会左右出现语法错误(当然大部分错误都消失了)。每个编译器最终都会出现自己独特的错误,在不同的点失败,但在其他编译器在某些点失败的地方似乎成功了。发生了什么事?为什么完全有效的代码(全部由微软编写)在由任何其他编译器处理时突然无法编译?

不幸的是,DirectX June 2010 SDK中包含的示例远不是"完美的有效代码"。它们使用了许多特定于微软编译器的扩展。

在我因为基本上没有希望而放弃之前,我在尝试用SamplesC++Direct3DBasicHLSL:编译示例时发现了以下Microsoft的特定依赖项

  • __noop内在
  • 宏CCD_ 3和CCD_
  • 标准函数的各种"安全"版本,如wsprintf_sstrcpy_s
  • 非标准预处理器标记粘贴
  • 允许goto跨变量初始化
  • __uuidof运算符

微软的DirectX标头也有一些问题,我没有提到,比如依赖于微软的SAL注释宏。可以说,尽管这是MinGW的失败,因为它没有这些DirectX标头的兼容版本。

其中一些问题比较容易解决。其他的则比较困难,需要重写样本中不兼容的部分。样本中可能还有更多我没有发现的Microsoft依赖项。

底线是,如果不首先修改示例和DXUT框架以使其更具可移植性,就无法使用MinGW或GCC的任何其他端口编译DirectX SDK中包含的示例。

相关内容

最新更新