20

CバインディングでD-Busを使用する方法を学ぼうとしています。私は D-Bus を使ったことがありません。私はこのチュートリアルに従っていますが、これは公式のもの (Freedesktop.org) であると想定しています。最初のサンプルプログラムを提供するこの段落まで読みましたが、残念ながら、このページには、コンパイル方法や含めるライブラリについての指示がありません。私は何か見落としてますか ?

私のOSはUbuntu 10.04 32bitです。libdbus-glib-1-devパッケージをインストールしました。#include <dbus/dbus.h>ソースファイルの先頭に追加して、コンパイルしてみました

$ gcc -ldbus-1 -I/usr/include/dbus-1.0/ -I/usr/lib/i386-linux-gnu/dbus-1.0/include -o my_dbus.bin my_dbus.c

しかし、私は失敗し続けます:

my_dbus.c: In function ‘main’:
my_dbus.c:7:3: error: unknown type name ‘DBusGConnection’
my_dbus.c:8:3: error: unknown type name ‘GError’
...

チュートリアルのポイントを見逃しましたか? そうではありません。このコードをコンパイルするのを手伝ってくれませんか?

前もって感謝します。

4

5 に答える 5

23

このようなチュートリアルは、一般的に、それが書かれている言語 (この場合は C) と、それを実行するオペレーティング システムについてある程度の知識があることを前提としています。

チュートリアルを見ると、main関数しか含まれていないことがわかります。#includeそのため、これを機能させるには、適切なディレクティブを追加する必要があります。

#include <stdlib.h>          // for exit()   
#include <dbus/dbus.h>       // for dbus_*   
#include <dbus/dbus-glib.h>  // for dbus_g_*

また、ライブラリ (この場合はdbusdbus-glib) をコンパイルするか、オペレーティング システムから事前にコンパイルされたものを使用して、それらを実行可能ファイルにリンクする必要があります。

また、ソースで提供されるヘッダー ファイル、またはオペレーティング システムの「開発」パッケージも必要です。

たとえば、私の Ubuntu ワークステーションでは、次のようにソース ファイルとヘッダー ファイルの両方をインストールできます。

sudo apt-get -y install dbus libdbus-1-dev libdbus-glib-1-2 libdbus-glib-1-dev

コンパイル (または適切にインストール) したら、プログラムのコンパイルに進みます。コンパイラ/リンカーにリンクするには、適切なインクルード パスとライブラリを指定する必要があります。たとえば、GCC と私の現在のセットアップでは、次のようになります。

gcc test.c -I/usr/include/dbus-1.0 \
           -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include \
           -I/usr/include/glib-2.0 \
           -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/ \
           -ldbus-1 \
           -ldbus-glib-1 \
           -Wall -Wextra

これによりa.out、現在のディレクトリに実行可能ファイルが作成されます。

確かに、私は C と Linux で数年の経験があるので、それらすべてを簡単に理解できます。C から始めようとしている場合は、おそらくもっと簡単なものから始めたほうがよいでしょう。

于 2013-01-10T18:03:39.643 に答える
5

libdbus-glib は非推奨であり、保守されていないため、C から D-Bus にアクセスするために使用しないでください。代わりにGDBusを使用してください。libdbus-1 も推奨されません。これは維持されていますが、D-Bus を使用するためのはるかに低レベルの API であり、GDBus のすべての便利な機能を備えているわけではありません。

熱心なギークが言うように、優れたGDBus のドキュメントが利用可能です

(libdbus-glib と libdbus-1 は、Google ジュースを与えないように意図的にリンクされていません。)

于 2015-02-09T13:29:19.803 に答える
2

<dbus/dbus-glib.h>によって自動的に含まれないため、個別に含める必要があるようです<dbus.h>

于 2013-01-10T17:15:02.073 に答える
1
于 2013-01-10T17:11:55.017 に答える