D-Bus GLib 绑定——无法让代码脱离实际
Posted
技术标签:
【中文标题】D-Bus GLib 绑定——无法让代码脱离实际【英文标题】:D-Bus GLib bindings—unable to get code off the ground 【发布时间】: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 行代码(加上测试代码)中做的事情。
【问题讨论】:
【参考方案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 support 和Highlevel D-Bus support 部分了解更多详细信息。
【讨论】:
我现在采用了不同的解决方案,所以我认为我不会等待 GDBus 出现。还是谢谢!以上是关于D-Bus GLib 绑定——无法让代码脱离实际的主要内容,如果未能解决你的问题,请参考以下文章
IPC进程间通信 D-Bus(Desktop Bus)快速入门(以libdbus-glib库为例)
linux 进程间通信 dbus-glib实例详解二(上) 消息和消息总线(附代码)
linux 进程间通信 dbus-glib实例详解一(附代码)(d-feet工具使用)
linux 进程间通信 dbus-glib实例详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)