如何编译基本的D-Bus/glib示例?

tvu*_*min 16 c dbus compilation glib

我正在尝试学习如何使用带有C绑定的D-Bus.我以前从未使用过D-Bus.我正在学习本教程,我认为这是官方教程(Freedesktop.org).我已经读过它,直到这个段落给出了第一个示例程序,但不幸的是我在这个页面上没有看到任何关于如何编译它或包含哪些库的指示.我错过了什么 ?

我的操作系统是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
Run Code Online (Sandbox Code Playgroud)

但我一直都在失败:

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’
...
Run Code Online (Sandbox Code Playgroud)

我是否错过了教程中的一点?不,你能帮我编译这段代码吗?

提前致谢.

net*_*der 20

像这样的教程通常假设您对它所编写的语言有一定的了解,在本例中为C,以及您将在其上运行的操作系统.

看一下教程,我发现它只包含一个main函数.因此,您需要添加适当的#include指令才能使其正常工作:

#include <stdlib.h>          // for exit()   
#include <dbus/dbus.h>       // for dbus_*   
#include <dbus/dbus-glib.h>  // for dbus_g_*
Run Code Online (Sandbox Code Playgroud)

此外,您将需要编译库(在这种情况下dbusdbus-glib),或者使用预编译的人从你的操作系统,以便将它们链接到可执行文件.

您还需要随源提供的头文件或操作系统中的"开发"软件包.

例如,在我的Ubuntu工作站上,我可以安装源文件和头文件,如下所示:

sudo apt-get -y install dbus libdbus-1-dev libdbus-glib-1-2 libdbus-glib-1-dev
Run Code Online (Sandbox Code Playgroud)

编译(或正确安装)后,继续编译程序.您需要指定正确的包含路径和库以链接到编译器/链接器.例如,使用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
Run Code Online (Sandbox Code Playgroud)

这应该a.out在当前目录中创建一个执行.

当然,我有几年的C和Linux经验,所以我很容易弄清楚这些东西.如果你想从C开始,你可能应该从更简单的开始.


Phi*_*all 5

请注意,libdbus-glib 已弃用、未维护,不应用于从 C 访问 D-Bus:请改用GDBus。也不推荐 libdbus-1:它被维护,但它是一个用于使用 D-Bus 的低级 API,并且不具备 GDBus 的所有便利功能。

正如热情的人所说,有很好的GDBus 文档可用

(libdbus-glib 和 libdbus-1 故意不链接以避免给他们谷歌果汁。)