私は 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 行のコード (およびテスト コード) で必要なことを正確に実行します。