我是DBus的新手,但我正在尝试在嵌入式设备上的两个Qt应用程序中使用它。我有一个非常简单的界面,包含一个插槽:
QString SendMessage(const QString &cmd);
然后,服务器应用程序使用以下代码启动连接:
DbusService* dBus = new DbusService;
new interfaceIfAdaptor(dBus);
QDBusConnection connection = QDBusConnection::sessionBus();
bool ret = connection.registerService("com.domain.project.interface");
qDebug() << "returns" << ret;
ret = connection.registerObject("/", dBus);
qDebug() << "returns" << ret;
这在桌面上运行良好。在嵌入式系统中,connection.registerService函数返回false。因此,任何发送到服务器的消息都会失败。我不知道为什么。运行'ps'告诉我[dbus-daemon -system]和[dbus-daemon -sesson]都在运行。
最后,我注意到Qt Creator在调试应用程序时会抱怨。我看到以下警告信息:
无法加载10个库的共享库符号,例如/opt/arm/lib/libQtDBus.so.4。
使用“info sharedlibrary”命令查看完整列表。
您需要“set solib-search-path”还是“set sysroot”?
无法加载/usr/lib/libdbus-1.so.3的共享库符号。
您需要“set solib-search-path”还是“set sysroot”?
如果需要其他信息来调试此问题,请告知我们。或者,如果有有用的dbus命令,我可以运行以帮助解决这个问题。谢谢!
答案 0 :(得分:2)
事实证明会话总线没有在设备上启动。我启用了它,但后来我遇到了地址没有传播到环境变量的问题。我可以在终端中手动设置它,但我不确定如何在Qt Creator中做同样的事情。
无论如何,我没有花费更多的时间来解决会话总线的问题,而是转而使用系统总线。我只需要更改/etc/dbus-1/system.conf文件,以允许任何人与系统总线通信,我的应用程序可以在嵌入式设备上运行。我知道这可能不是长期解决方案,但它现在有效。