所以我一直在尝试开发一个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。我从QtCreator获取的libEGL.dll和libGLESv2.dll除外,因为我无法在上一个文件夹中找到它们。但是,这不应该是一个问题,因为我正在编译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已停止工作)......奇怪的是&#34;无法使上下文保持最新状态&#34; (我相信是由makeCurrent()生成的)来自&#34; Widget创建&#34; ... 知道什么是错的以及我如何调试它?
非常感谢您的时间和帮助!
答案 0 :(得分:0)
最后,这是一系列问题:
我使用的opengl32.dll根据依赖性walker似乎是64位(奇怪的是我从C:/ System32 /获取它)。我下载了一个新的32位,它工作正常。谢谢Sebastian Lange。
第二个问题可能来自第二台机器的显卡/ OpenGL。我试过第三台电脑,现在工作正常。谢谢vahancho。
希望这可以帮助未来的程序员!