環境: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庫文件