sdbus-c++使用说明
1. 前言
本章节是在前文D-Bus理论基础和linux系统DBus工具的使用的基础上,深入学习和理解sdbus-c++库的使用方法,文章篇幅较长(阅读时可以打开左侧的目录结构,方便理清文章结构)。若仅为了学习在工程中应用sdbus-c++ API接口,可以直接跳转至C++绑定层 API 使用说明(待发布),因为该库提供的最高层API也足够使用。
参考链接:
本文内容对应的是sdbus-c+±2.0.0版本(官方文档可能会随升级发生变动):
using-sdbus-c++.md
2. 介绍
sdbus-c++ 是一个基于sd-bus构建的 C++ D-Bus 库(即sd-bus的包装器),sd-bus 是systemd项目中实现的轻量级 D-Bus 客户端库。它在更高的抽象级别上提供 D-Bus 功能,尽管 sdbus-c++ 涵盖了大部分 sd-bus API,但它尚未完全涵盖所有 sd-bus API 细节。重点放在最广泛使用的功能上:D-Bus 连接、对象、代理、同步和异步方法调用、信号和属性。
3. 编译
3.1 源文件下载
编译所需的依赖库包括sigc++、systemd。本文使用了sigc+±3.6.0版本以及sdbus-c+±2.0.0版本:
libsigcplusplus-3.6.0.tar.gz
sdbus-cpp-2.0.0.tar.gz
3.2 解决systemd依赖
注意:
如果想交叉编译,亲测过程并不顺利,依赖的sigc++、expat、systemd、libcap全都要先进行交叉编译,期间涉及到手动修改CMakeList,尤其systemd更是使用meson、ninja编译工具,本文32位arm的交叉编译结果,最后也是通过buildroot构建系统后,从系统里提出依赖的动态库直接使用的。
通常linux系统自带了systemd。如果没有,我们可以采取以下两种方式:
- systemd相当独立,我们可以单独编译systemd的动态库;
- sdbus-c++提供了更便捷的方式,在cmake配置中启用
SDBUSCPP_BUILD_LIBSYSTEMD
,这是在非 systemd 环境中构建、分发和使用 sdbus-c++的最方便、最有效的方法。只需确保具有 libsystemd 构建过程所需的所有依赖项:ninja、git、gperf、libmount、libcap、librt,同时还可以通过设置SDBUSCPP_LIBSYSTEMD_VERSION
标志来调整要采用的 systemd 版本(