找不到Qt 5.12 D3D编译器模块

时间:2018-12-11 19:05:52

标签: c++ qt qml qt5

我已经安装了Qt 5.12,当我想编译我的项目时,请显示此 错误:

错误:

QOpenGLShaderProgram::uniformLocation(qt_Matrix): shader program is not linked
ensureInitialized(141): D3D compiler module not found.
QOpenGLShader::link: D3D compiler module not found.
shader compilation failed: 
"D3D compiler module not found.\n"

3 个答案:

答案 0 :(得分:2)

欢迎您!

首先,让我们澄清一下错误的含义。

Qt在Windows上使用 ANGLE ,该层通过将OpenGL调用转换为DirectX调用,从而允许在不可用OpenGL的系统上运行OpenGL软件。 Qt根据机器的配置(显卡型号,视频驱动程序版本等)决定是使用纯OpenGL还是使用ANGLE。 有关更多详细信息,请访问https://wiki.qt.io/Qt_5_on_Windows_ANGLE_and_OpenGL

即使您自己没有编写任何OpenGL代码,qml运行时肯定也会有很多OpenGL调用,它们可能会经过ANGLE。

这就是为什么令人困惑的错误消息(在处理OpenGL代码时正在寻找D3D着色器编译器!)的原因。

现在,尽管在撰写本文时尚未提供解决方案,但Qt项目 bugtracker 报告的问题与您https://bugreports.qt.io/browse/QTBUG-71510相同。我建议不时查看Bugtracker,然后监视此问题的进展。

您可以尝试几种解决方法:

  1. 将d3dcompiler_xx.dll复制到您的exe文件所在的目录中;
  2. 通过将环境变量 QT_OPENGL 设置为 desktop ,强制Qt使用OpenGL而不是DirectX(有关更多详细信息,请访问http://doc.qt.io/qt-5/windows-requirements.html

答案 1 :(得分:1)

根据bugreports.qt,此问题已从QT 5.12.1版中修复。

https://bugreports.qt.io/browse/QTBUG-71510

答案 2 :(得分:0)

我的较旧的Del笔记本电脑上存在相同的问题。将d3dcompiler_43.dll放在exe文件夹中确实可以解决该问题。我发现使用以下命令之一也是可行的,我认为这可以避免一起使用ANGLE。

//要使用纯OpenGL: QCoreApplication :: setAttribute(Qt :: AA_UseDesktopOpenGL);

//或使用模拟OpenGL的软件: QCoreApplication :: setAttribute(Qt :: AA_UseSoftwareOpenGL);

我只在main.cpp的“ int main(int argc,char * argv [])”括号中包括第一个纯OpenGL设置