无法在虚拟机上初始化GLX-CLI

时间:2018-06-13 22:09:56

标签: qt opengl virtual-machine

我创建了一个带有GUI的Qt应用程序,该GUI也可以在命令行上运行(从不调用QMainWindow :: show())。当我尝试在Debian虚拟机上运行它时,我收到错误:

$ xvfb-run ./myApp
Could not initialize GLX 
Aborted

我在Ubuntu 16.04上构建它,动态链接到Qt库并复制到所需的库。它以前工作,但在我更新应用程序后开始出现此错误。如何判断此错误是由于缺少依赖性还是xvfb的某些问题?

2 个答案:

答案 0 :(得分:3)

$ xvfb-run ./myApp

Xvfb不支持GLX / OpenGL。就这样。使用带有GPU驱动程序的完整Xorg服务器或无头EGL上下文。

答案 1 :(得分:1)

问题很可能是因为您实例化了QApplicationQGuiApplication:没有显示窗口是不够的。从命令行运行时,还需要仅使用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;
}