- PC: Debian 9.4.0, x64, ip 192.168.1.10
- Qt:Qt Creator 4.6.1 基于 Qt5.11.0
- BeagleBone Black: Debian 9.3.0, armv7, ip 192.168.1.20
我在PC上为BeagleBone Black交叉编译了一个GUI应用程序,我可以在我的BeagleBone上成功执行它。
但是当我使用 F5(菜单:调试>启动调试(远程调试应用程序时,我遇到了如下问题。
QXcb连接: 无法连接到显示器
应用程序在 main(( 中崩溃的行:
QApplication a(argc, argv);
- 以下是编译和调试时的详细信息:
调试详细信息:
Checking available ports...
Found 101 free ports.
Starting gdbserver...
Debugging starts
Listening on port 10001
Remote debugging from host 192.168.1.10
Process /home/debian/gdb/armtest3 created; pid = 13981
Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
Could not load shared library symbols for 25 libraries, e.g. /usr/lib/arm-linux-gnueabihf/libQt5Widgets.so.5.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
-----------------armtest3 start------------
QXcbConnection: Could not connect to display
编译输出:
09:31:33: Running steps for project armtest3...
09:31:33: Configuration unchanged, skipping qmake step.
09:31:33: Starting: "/usr/bin/make"
make: Nothing to be done for 'first'.
09:31:33: The process "/usr/bin/make" exited normally.
09:31:33: The remote file system has 218 megabytes of free space, going ahead.
09:31:33: Deploy step finished.
09:31:33: Trying to kill "/home/debian/gdb/armtest3" on remote device...
09:31:37: Remote application killed.
09:31:37: Deploy step finished.
09:31:37: No deployment action necessary. Skipping.
09:31:37: Deploy step finished.
09:31:37: Elapsed time: 00:04.
- 以下是我的比格尔骨套件
:
比格尔骨套件配置主.c
主.c
#include "mainwindow.h"
#include <QApplication>
#include <iostream>
#include <QDateTime>
#include <QDebug>
using namespace std;
int main(int argc, char *argv[])
{
cout << "-----------------armtest3 start------------" << endl;
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
相关问题:QXcb连接:尝试使用 Qt Creator 调试 Linux 应用程序时无法连接到显示器
当您部署应用程序并从设备本身的 X11 系统内运行它时,您会发现它可以工作,因为在这里它可以访问DISPLAY
环境变量,该变量(简要地说(告诉它在哪里显示自己。此环境变量已在 X 会话中的进程树中进一步设置。
当您通过调试器启动程序时,Qt Creator将连接到远程设备(通过工具>选项>设备中的设置(,并通过ssh运行程序。在这种情况下,您的程序不再知道在哪里显示自己,因为显然它无法在 ssh 中显示。它在您指示的线路上出现故障,因为这是 XCB 子系统尝试确定为此目的连接到哪个 X-Server 的地方。
所以要回答你的问题:你需要在远程调试时手动提供DISPLAY
环境变量。
测试此问题的一种简单方法是转到">项目模式",找到用于为远程设备构建的工具包,然后选择">运行"设置。在此下,您应该找到">运行环境"部分。在这里,您可以添加一个名为DISPLAY
的新变量,并将其值设置为您正在运行的显示器的标识符(我猜你会想要:0.0
,指示本地主机上的第一个可用屏幕,尽管您应该阅读有关 DISPLAY 变量的信息,例如这里或这里(。
一个长期的,可能更好的解决方案是在工具包的设置中设置相同的变量(工具>选项>>环境中构建和运行>工具包(。然后,这将适用于您使用它创建的未来程序。