我创建了一个带有GUI的Qt应用程序,该GUI也可以在命令行上运行(从不调用QMainWindow :: show())。当我尝试在Debian虚拟机上运行它时,我收到错误:
$ xvfb-run ./myApp
Could not initialize GLX
Aborted
我在Ubuntu 16.04上构建它,动态链接到Qt库并复制到所需的库。它以前工作,但在我更新应用程序后开始出现此错误。如何判断此错误是由于缺少依赖性还是xvfb的某些问题?
答案 0 :(得分:3)
$ xvfb-run ./myApp
Xvfb不支持GLX / OpenGL。就这样。使用带有GPU驱动程序的完整Xorg服务器或无头EGL上下文。
答案 1 :(得分:1)
问题很可能是因为您实例化了QApplication
或QGuiApplication
:没有显示窗口是不够的。从命令行运行时,还需要仅使用QCoreApplication
。
#include <QtWidgets>
#include <memory>
#ifdef Q_OS_WIN
#include <io.h>
int isatty(int fd) { return _isatty(fd); }
#else
#include <unistd.h>
#endif
using MyWindow = QWidget;
bool onCommandLine() {
return isatty(0);
}
int main(int argc, char **argv) {
std::unique_ptr<QCoreApplication> app(
onCommandLine() ? new QCoreApplication(argc, argv)
: new QApplication(argc, argv));
/* common logic goes here, e.g. argument parsing, etc. */
if (!onCommandLine()) {
MyWindow w;
w.show();
return app->exec();
} else
return 0;
}