环境:Ubuntu18.04
一、下载
D-Bus源码下载地址:https://dbus.freedesktop.org/releases/dbus/
随便下载一个版本,比如我下载的是dbus-1.12.0.tar.gz(1.12.x为稳定版本)
二、编译和安装
编译和安装其实就是Linux源码包的常规三步操作(在INSTALL文件中有说明):
第一步:
./configure --prefix=/home/username/dbus-1.12.0/output
如果不指定prefix路径,默认为/usr。注意!作为学习使用我们一般仅仅需要使用头文件和库文件,因此最好指定安装在home下面,我曾经使用默认的prefix路径,并且使用sudo make install,导致我的电脑重启后无法开机,只能重装,应该是安装时替换了某些系统的文件导致系统出了问题。
config过程可能会有一些error出现,主要是为了告诉我们有哪些依赖没有安装,一般情况下这些error网上搜索一下都比较容易解决,因此就不在这里一一列出。
第二步:
make
第三步:
make install
按照prefix指定路径进行安装,安装后整个output目录结构如下:
. ├── bin │ ├── dbus-cleanup-sockets │ ├── dbus-daemon │ ├── dbus-launch │ ├── dbus-monitor │ ├── dbus-run-session │ ├── dbus-send │ ├── dbus-test-tool │ ├── dbus-update-activation-environment │ └── dbus-uuidgen ├── etc │ └── dbus-1 │ ├── session.conf │ └── system.conf ├── include │ └── dbus-1.0 │ └── dbus │ ├── dbus-address.h │ ├── dbus-bus.h │ ├── dbus-connection.h │ ├── dbus-errors.h │ ├── dbus.h │ ├── dbus-macros.h │ ├── dbus-memory.h │ ├── dbus-message.h │ ├── dbus-misc.h │ ├── dbus-pending-call.h │ ├── dbus-protocol.h │ ├── dbus-server.h │ ├── dbus-shared.h │ ├── dbus-signature.h │ ├── dbus-syntax.h │ ├── dbus-threads.h │ └── dbus-types.h ├── lib │ ├── cmake │ │ └── DBus1 │ │ ├── DBus1Config.cmake │ │ └── DBus1ConfigVersion.cmake │ ├── dbus-1.0 │ │ └── include │ │ └── dbus │ │ └── dbus-arch-deps.h │ ├── libdbus-1.a │ ├── libdbus-1.la │ ├── libdbus-1.so -> libdbus-1.so.3.19.3 │ ├── libdbus-1.so.3 -> libdbus-1.so.3.19.3 │ ├── libdbus-1.so.3.19.3 │ └── pkgconfig │ └── dbus-1.pc ├── libexec │ └── dbus-daemon-launch-helper ├── share │ ├── dbus-1 │ │ ├── services │ │ ├── session.conf │ │ ├── session.d │ │ ├── system.conf │ │ ├── system.d │ │ └── system-services │ ├── doc │ │ └── dbus │ │ ├── diagram.png │ │ ├── diagram.svg │ │ ├── examples │ │ │ ├── example-session-disable-stats.conf │ │ │ ├── example-system-enable-stats.conf │ │ │ └── GetAllMatchRules.py │ │ └── system-activation.txt │ └── xml │ └── dbus-1 │ ├── busconfig.dtd │ └── introspect.dtd └── var ├── lib │ └── dbus └── run └── dbus 30 directories, 48 files
三、使用D-Bus头文件和库
我在本地写了一个demo用于测试运行,内容很简单就不写出来了,下面是编译命令:
gcc main.c -I/home/username/dbus-1.12.0/output/include/dbus-1.0 -I/home/username/dbus-1.12.0/output/lib/dbus-1.0/include -lrt -lpthread -L/home/username/dbus-1.12.0/output/lib -ldbus-1 -o main
简单解释一下
- -I/home/username/dbus-1.12.0/output/include/dbus-1.0:指定dbus.h路径,是因为一般会在代码里面写成#include <dbus/dbus.h>
- -I/home/username/dbus-1.12.0/output/lib/dbus-1.0/include:指定dbus-arch-deps.h路径,其实也可以直接copy到dbus.h路径下
- -lrt和-lpthread:这两个不用关注,不需要这两个库,只是因为我自己用到了
- -L/home/username/dbus-1.12.0/output/lib -ldbus-1:指定dbus库文件