这几天开始弄dbus通信协议,理论知识不多说,网上一大堆,基于dbus开发,首先得搭建dbus开发环境,本人用红帽和centos搭建的。
首先下载源码:http://dbus.freedesktop.org/releases/dbus/
里面有各种各样的历史版本,我下载的是最新版本的。(dbus-1.10.2.tar.gz)
tar解压之后,运行./configure出现错误:
后来发现是某个依赖包没有安装,利用yum search expat ,发现:
也就是expat-devel.i686这个依赖包。
运行:yum install expat-devel.i686 安装好这个依赖包之后,再次运行./configure,发现成功了,然后make,make install,这个时候,dbus库就安装到了pc机了。
注意,以上是从dbus下载源码,编译然后安装到pc机上的情况。
下面介绍从yum下载dbus库,yum search dbus,可以发现如下的安装包
yum install *dbus* 这样就安装好了库。
接下来是centos的情况:
centos和红帽差不多,下载源码:http://dbus.freedesktop.org/releases/dbus/
搜索 yum search expat ,安装yum install expat-devel.x86_64,./configure,make, make install,这样就把库安装好了。
用yum的库也和红帽差不多,yum search dbus
挑选出和系统匹配的处理安装,我的是 x86_64的,所用安装所用x86_64的yum包。
环境搭建好了之后,编写好dbus程序,但是会发现很多错误,下面以centos为例解决常见错误。
错误1 dbus/dbus.h : No such file or directory
这是dbus库的头文件位置不对。进入/usr/include/dbus-1.0/dbus,发现dbus.h在此目录下:
进入/usr/include目录,ln -sf /usr/include/dbus-1.0/dbus ./dbus 或者cp -rf /usr/include/dbus-1.0/dbus /usr/include。
错误2 :dbus/dbus-arch-deps.h : No such file or directory
解决方法 :cp /usr/lib/glib-2.0/include/glibconfig.h /usr/include
错误 3:
(.text+0xbb6): undefined reference to `dbus_message_iter_get_basic'
..........
(.text+0xbd4): undefined reference to `dbus_message_unref'
这是需要连接动态库
解决方法:
gccsend.c .c -l dbus-glib-1-osend
特别注意:红帽的系统是用 gcc send.c -l dbus-glib-1 -o send
下面是解决#include <dbus/dbus-glib.h>错误的方法:
ln –sf ./glib-2.0/glib glib
ln –sf ./glib-2.0/gobject ./gobject
把 glib.h 文件放到 /usr/include 下
cp ./glib-2.0/glib.h ./
把 glib-object.h 放到 /usr/include 下
cp ./glib-2.0/glib-object.h ./
注意,路径可能不同,以实际的pc机为准