我在PC上交叉编译了BeagleBone Black的GUI应用程序,并且可以在BeagleBone上成功执行它。
但是,当我使用F5(菜单:Debug-> Start Debugging)远程调试应用程序时,遇到如下问题。
QXcbConnection:无法连接到显示器
该应用程序在以下行的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.
以下是我的BeagleBone套件:
BeagleBone套件配置
main.c
main.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();
}
当您部署应用程序并在设备本身的X11系统中运行它时,您会发现它可以正常工作,因为在这里它可以访问DISPLAY
环境变量(简而言之就是告诉它在哪里显示)。此环境变量已在X会话的进程树中进一步设置。
通过调试器启动程序时,Qt Creator将连接到远程设备(通过“工具”>“选项”>“设备”中的设置),并通过ssh运行该程序。在这种情况下,您的程序不再知道在何处显示自身,因为显然它无法在ssh中显示。它在您指示的行上发生故障,因为这是XCB子系统试图确定为此目的连接到哪个X服务器的地方。
因此,回答您的问题:DISPLAY
在进行远程调试时,您需要手动提供环境变量。
一种简单的测试方法是进入“项目模式”,找到要用于远程设备的工具包,然后选择“运行”设置。在此下,您应该找到“运行环境”部分。在这里您可以添加一个名为的新变量DISPLAY
,并将其值设置为正在运行的显示器的标识符(我想您会想要:0.0
,它指示localhost上的第一个可用屏幕,尽管您应该阅读DISPLAY变量,例如,这里或这里)。
长期的,可能更好的解决方案是在工具包的设置中设置相同的变量(“工具”>“选项”>“构建和运行”>“工具包”>“环境”)。然后,这将适用于使用此程序创建的将来程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句