1

DBus は初めてですが、組み込みデバイス上の 2 つの Qt アプリケーションで使用しようとしています。1 つのスロットで構成される非常に単純なインターフェイスがあります。

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 が文句を言うことに気付きました。次の警告メッセージが表示されます。

/opt/arm/lib/libQtDBus.so.4 など、10 個のライブラリの共有ライブラリ シンボルを読み込めませんでした。

完全なリストを表示するには、「info sharedlibrary」コマンドを使用します。

「set solib-search-path」または「set sysroot」が必要ですか?

/usr/lib/libdbus-1.so.3 の共有ライブラリ シンボルを読み込めませんでした。

「set solib-search-path」または「set sysroot」が必要ですか?

この問題をデバッグするために追加情報が必要な場合は、お知らせください。または、これを理解するために実行できる便利な dbus コマンドがある場合。ありがとう!

4

1 に答える 1

2

デバイスでセッション バスが開始されていないことが判明しました。有効にしましたが、アドレスが環境変数に反映されないという問題に遭遇しました。端末で手動で設定できますが、Qt Creator で同じことを行う方法がわかりません。

とにかく、セッション バスの問題を理解することに時間を費やすよりも、システム バスの使用に切り替えました。/etc/dbus-1/system.conf ファイルを変更して、誰でもシステム バスと通信できるようにし、アプリケーションが組み込みデバイスで動作するようにするだけで済みました。おそらく長期的な解決策ではないことはわかっていますが、今のところ機能しています。

于 2012-09-25T15:54:59.540 に答える