【问题标题】:D-Bus GLib bindings—unable to get code off the groundD-Bus GLib 绑定​​——无法让代码脱离实际
【发布时间】:2011-04-01 05:41:42
【问题描述】:

我一直在使用 GLib 的 D-Bus 绑定,试图让某些东西(anything)正常工作,但收效甚微。我一直在尝试让Ross Burton's example code 编译和运行,但不断遇到新的令人兴奋的困难。

您能否帮助调试此代码,或者如果失败了,请指出一些 D-Bus GLib 代码确实有效的示例?

由于罗斯的代码已经过时,我已经替换了这一行

dbus_g_object_class_install_info (G_OBJECT_CLASS (echo_class), &dbus_glib_echo_object_info);

dbus_g_object_type_install_info (G_OBJECT_TYPE (echo_class), &dbus_glib_echo_object_info);

根据他在那篇文章中的 cmets,除了更新包含目录以匹配我的盒子上的设置之外,没有进行其他更改。

但是,在运行服务器可执行文件时,我收到以下错误:

** (process:11747): CRITICAL **: dbus_g_object_type_install_info: assertion `G_TYPE_IS_CLASSED (object_type) || G_TYPE_IS_INTERFACE (object_type)' failed

此时的堆栈跟踪,根据 gdb,是

#0  0x0000003b5f40b440 in dbus_g_object_type_install_info () from /usr/lib64/libdbus-glib-1.so.2
#1  0x0000003b5722909c in g_type_class_ref () from /lib64/libgobject-2.0.so.0
#2  0x0000003b57229798 in g_type_create_instance () from /lib64/libgobject-2.0.so.0
#3  0x0000000000400f16 in main (argc=<value optimized out>, argv=0x7fff156497d8) at EchoObject.c:111

我不确定出了什么问题,或者调试的下一步应该是什么。我想要一些发送和接收 D-Bus 方法调用消息的基本代码,这样我就可以看到在我的应用程序中应该如何工作。

我正在使用 D-Bus 0.73。

更新:鉴于我没有成功,而且这里没有回应,我目前正在考虑放弃 D-Bus 并寻找其他 IPC 机制。

更新 2:最后,我采用了 Unix 命名的套接字方法,这正是我需要它在总共 280 行代码(加上测试代码)中做的事情。

【问题讨论】:

    标签: c ipc glib dbus


    【解决方案1】:

    在下面一行

    dbus_g_object_type_install_info (G_OBJECT_TYPE (echo_class), &dbus_glib_echo_object_info);
    

    您需要使用 G_OBJECT_CLASS_TYPE() 宏而不是 G_OBJECT_TYPE()。

    这是因为 echo_class 是 EchoClass 的一个实例,它是 GObject 世界中的“类结构”。 G_OBJECT_TYPE() 用于“对象结构”,即上述示例中的 Echo 结构。

    我知道这个答案对@me_and 来说太晚了,但也许其他人会觉得它很有用。

    【讨论】:

      【解决方案2】:

      dbus-glib 非常......使用起来很讨厌,而且它在这一点上基本上没有维护。您最好使用它即将推出的替代品 GDBus,它将包含在下一个稳定的 GLib 版本中。查看文档的Lowlevel D-Bus supportHighlevel D-Bus support 部分了解更多详细信息。

      【讨论】:

      • 我现在采用了不同的解决方案,所以我认为我不会等待 GDBus 出现。还是谢谢!
      猜你喜欢
      • 2012-02-17
      • 1970-01-01
      • 2011-09-07
      • 2015-03-01
      • 2021-09-09
      • 2012-12-25
      • 2015-12-22
      • 2019-10-10
      • 2018-12-09
      相关资源
      最近更新 更多