Qt DBus registerService函数调用在嵌入式Linux设备上返回false

时间:2012-09-24 21:27:11

标签: qt embedded-linux dbus

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

1 个答案:

答案 0 :(得分:2)

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

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