我一直在玩 GLib 的 D-Bus 绑定,试图让某些东西(任何东西)工作,但成功非常有限。我一直在尝试编译和运行Ross Burton 的示例代码,但不断遇到新的令人兴奋的困难。
你能帮忙调试这段代码吗,或者失败了,给我指出一些 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);
根据他对该文章的评论,但除了更新包含目录以匹配我的盒子上的设置外,没有进行其他更改。
但是,在运行服务器可执行文件时,我收到以下错误:
** (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 行代码(加上测试代码)中做的事情。