1

我是 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 命令我可以运行来帮助解决这个问题。谢谢!

4

1 回答 1

2

事实证明会话总线没有在设备上启动。我启用了它,但后来我遇到了地址没有传播到环境变量的问题。我可以在终端中手动设置它,但我不确定如何在 Qt Creator 中做同样的事情。

无论如何,我没有花更多时间解决会话总线的问题,而是转而使用系统总线。我只需要更改 /etc/dbus-1/system.conf 文件以允许任何人与系统总线通信,并且我的应用程序可以在嵌入式设备上运行。我知道这可能不是长期解决方案,但它现在有效。

于 2012-09-25T15:54:59.540 回答