所以我一直在尝试开发一个Qt应用程序,并在另一台没有安装Qt的Windows 8.1机器上运行它。在我的第一台计算机上,我使用 Visual Studio 2013 开发我的应用程序,并使用多线程 DLL 标志在发布模式下编译它。
这将生成一个.exe文件。在同一个文件夹中,我有:
accessible/ platform/
assimp.dll kernel32.dll
icudt52.dll icuin.dll
icuuc52.dll opengl32.dll
libEGL.dll libGLESv2.dll
Qt5Core.dll Qt5Gui.dll
Qt5OpenGL.dll Qt5Widgets.dll
msvcp110.dll msvcr110.dll
msvcp120.dll msvcr120.dll
我从 C:/Qt32bits/5.3/msvc2013_opengl/复制了 Qt DLL。除了libEGL.dll和libGLESv2.dll我从QtCreator得到的,因为我在以前的文件夹中找不到它们。但是,这应该不是问题,因为我正在使用msvc(不是mingw(进行编译,对吗?
在我的代码中,一开始我有:
QApplication app(argc, argv);
QGLFormat format;
format.setProfile(QGLFormat::CoreProfile);
format.setVersion(4, 0);
QGLFormat::setDefaultFormat(format);
/*And then later*/
cout << "Creating Window" << endl;
GLWidget *widget = new GLWidget(i); //i is the id of the widget
cout << "Widget created" << endl;
widget->makeCurrent();
cout << "Context current" << endl;
GLWidget派生自QGLWidget,在构造函数中,我只是将其ID属性设置为i。
在我的机器上,一切正常。但是当我在第二台机器上运行我的可执行文件时,我得到输出:
"Creating Window"
"Failed to make context current."
"Widget created"
"Context current"
然后它崩溃了(MyApp.exe已经停止工作(...奇怪的是,"未能使上下文当前"(我相信是由makeCurrent((生成的(出现在"创建小部件"之前......知道出了什么问题以及如何调试它吗?
非常感谢您的时间和帮助!
最后是混合问题:
-
根据依赖 walker 的说法,我使用的 opengl32.dll 似乎是 64 位的(奇怪的是我从 C:/System32/中获取了它(。我下载了一个新的 32 位,它工作正常。谢谢塞巴斯蒂安·兰格。
-
第二个问题可能来自第二台机器的显卡/OpenGL。我已经在第三台计算机上尝试过,现在它工作正常。谢谢瓦汉乔。
希望这可以帮助未来的编码人员!