【问题标题】:Crash when running QT application on Ubuntu Server在 Ubuntu 服务器上运行 QT 应用程序时崩溃
【发布时间】:2018-09-27 00:18:29
【问题描述】:

我发现如果我在 Ubuntu 桌面版上运行 QT 应用程序,我就可以运行该应用程序。如果我使用相同的应用程序并尝试在 Ubuntu 服务器版本上运行它,我会在启动 QT 应用程序时看到崩溃。到目前为止,我已经看到我需要通过设置此环境变量来设置 QT 以在屏幕外渲染:

export QT_QPA_PLATFORM=offscreen

然后当我运行应用程序时,我得到了这个堆栈跟踪,应用程序崩溃了:

Thread 3 "hmi" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff7fa8700 (LWP 18084)]
0x00007fffdf88decb in ?? () from /Qt5.6.2/5.6/gcc_64/plugins/platforms/libqoffscreen.so
(gdb) bt
#0  0x00007fffdf88decb in ?? () from /Qt5.6.2/5.6/gcc_64/plugins/platforms/libqoffscreen.so
#1  0x00007fffdf88e283 in ?? () from /Qt5.6.2/5.6/gcc_64/plugins/platforms/libqoffscreen.so
#2  0x00007ffff399a78d in QOpenGLContext::create() () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Gui.so.5
#3  0x00007ffff41d2a67 in ?? () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Quick.so.5
#4  0x00007ffff41d32d2 in ?? () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Quick.so.5
#5  0x00007ffff39633ea in QWindow::event(QEvent*) () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Gui.so.5
#6  0x00007ffff4206553 in QQuickWindow::event(QEvent*) () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Quick.so.5
#7  0x00007ffff4eb25ca in QCoreApplication::notify(QObject*, QEvent*) () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Core.so.5
#8  0x00007ffff4eb2720 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Core.so.5
#9  0x00007ffff3958c69 in QGuiApplicationPrivate::processExposeEvent(QWindowSystemInterfacePrivate::ExposeEvent*) () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Gui.so.5
#10 0x00007ffff39597fd in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Gui.so.5
#11 0x00007ffff393aad3 in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Gui.so.5
#12 0x00007fffdf88e3f0 in ?? () from /Qt5.6.2/5.6/gcc_64/plugins/platforms/libqoffscreen.so
#13 0x00007fffe9eb3197 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#14 0x00007fffe9eb33f0 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#15 0x00007fffe9eb349c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#16 0x00007ffff4f01f07 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Core.so.5
#17 0x00007ffff4eb076a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Core.so.5
#18 0x00007ffff4eb85fd in QCoreApplication::exec() () from /Qt5.6.2/5.6/gcc_64/lib/libQt5Core.so.5

我使用相同的应用程序并使用屏幕外设置运行,而在桌面版上我没有看到同样的崩溃。我没有看到太多关于 QT 库 libqoffscreen.so 的信息,也找不到预建库的符号以获得更好的堆栈跟踪。我可能需要在 Ubuntu 服务器上安装什么东西才能运行这个 QT 应用程序吗?

【问题讨论】:

  • 此应用程序中似乎存在错误。安装其他随机应用程序不太可能消除该错误。
  • 尝试在卡路里下跑步
  • 如果应用程序中有错误,为什么它可以在桌面版本上运行?

标签: c++ qt ubuntu server


【解决方案1】:

您正在尝试使用 Qt Quick,但这不适用于屏幕外平台,因为那里不支持 OpenGL。我不明白你为什么要无头运行这样的应用程序——它可能没有用处。由于它是您的代码,因此您不应该在无头模式下显示 GUI:要么添加一个命令选项以在没有 GUI 的情况下启动,要么使用编译选项禁用 GUI 代码(例如,从 makefile 传递的宏)。

【讨论】:

  • 因此,即使它在屏幕外,我也会连接 selenium 来驱动 GUI,即使它在屏幕外。这样我就可以针对 GUI 运行一些自动化测试,但不在乎它是否可见。我想这仍然不能回答为什么我在屏幕外模式下看到它在 Ubuntu 桌面版本上运行。
猜你喜欢
  • 2014-04-03
  • 2012-04-26
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
相关资源
最近更新 更多