【dbus-cxx】libsigc++ 和 dbus-cxx 在 Ubuntu 中的编译和配置

article/2025/9/19 19:43:01

文章目录

  • 参考资料
  • 配置环境
    • cmake
    • libsigc++
    • dbus-cxx
  • 例程
    • server.cpp
    • client.cpp
    • Makefile
    • 运行结果

此帖作为自己学习记录使用,尚未使用交叉编译,仅在本地使用

参考资料

需先了解DBUS基础知识,建议看DBUS官方文档
DBUS-CXX也是建议看官方文档,各个配置环境也先仔细看对应的文档再操作
DBUS-CXX的中文资料较少,耐心看完官方文档

dbus-cxx: dbus-cxx Library

[C++]:libsigc++ programming @ 玄根白丁的部落格

配置环境

需先配置好dbus环境,可参考上一篇博客

具体版本
ligsigc++ 3.0.0
dbus-cxx-2.0

cmake

  1. 检查自己是否有cmake并且版本是否大于3.12,若都无,从该网站下载cmake源码
  2. 解压cmake 源码,之后进入cmake目录执行 sudo ./configure,然后执行sudo make && make install

libsigc++

从官方文档中可以看到,从压缩包build比git出来的项目更容易,git出来在make的时候会遇到错误

  1. sudo apt-get install mm-common下载 mm-common

  2. 下载源码 wget https://download.gnome.org/sources/libsigc++/3.0/libsigc%2B%2B-3.0.0.tar.xz

    这边选择3.0.0版本,3.2版本利用autotools编译会出现问题,暂时未找到解决方法

  3. 执行 mkdir __install

  4. 解压之后执行./configure --prefix=$PWD/__install,如果是交叉编译,需要加上--host=xxxx

  5. make && make install

  6. 可以看见在__install 下面生成了如下目录,对应着头文件,库文件

生成的库文件和头文件

dbus-cxx

  1. 下载源码 git clone https://github.com/dbus-cxx/dbus-cxx.git
  2. 添加 shell 环境变量,指定libsig++安装出来的pkgconfig的位置,以及指定
export PKG_CONFIG_PATH=/home/flork/git/libsigc++-3.0.0/__install/lib/pkgconfig:$PKG_CONFIG_PATH

export PKG_CONFIG_PATH=/home/flork/git/libsigc++-3.0.0/__install/lib/pkgconfig:$PKG_CONFIG_PATH
3. 按照这些步骤安装即可

步骤

编译需要添加指令pkg-config --cflags --libs dbus-cxx-2.0 , 并添加shell 环境变量指定libsig++ 和 dbus-cxx的lib位置

export LD_LIBRARY_PATH=/home/flork/git/dbus-cxx/build:/home/flork/git/libsigc++-3.0.0/__install/lib:$LD_LIBRARY_PATH

编译指令

例程

例程来自官方文档例程,详细介绍去文档dbus-cxx: Quick start example 0: A simple server and client

server.cpp

#include <dbus-cxx.h>
#include <unistd.h>double add(double param1, double param2) { return param1 + param2; }int main()
{std::shared_ptr<DBus::Dispatcher> dispatcher = DBus::StandaloneDispatcher::create();std::shared_ptr<DBus::Connection> conn = dispatcher->create_connection(DBus::BusType::SESSION);if (conn->request_name("dbuscxx.quickstart_0.server", DBUSCXX_NAME_FLAG_REPLACE_EXISTING) != DBus::RequestNameResponse::PrimaryOwner)return 1;// create an object on usstd::shared_ptr<DBus::Object> object = conn->create_object("/dbuscxx/quickstart_0", DBus::ThreadForCalling::DispatcherThread);// add a method that can be called over the dbusobject->create_method<double(double, double)>("dbuscxx.Quickstart", "add", sigc::ptr_fun(add));sleep(10);return 0;
}

client.cpp

#include <dbus-cxx.h>
#include <iostream>int main()
{std::shared_ptr<DBus::Dispatcher> dispatcher;dispatcher = DBus::StandaloneDispatcher::create();std::shared_ptr<DBus::Connection> connection;connection = dispatcher->create_connection(DBus::BusType::SESSION);// create an object proxy, which stands in for a real object.// a proxy exists over the dbusstd::shared_ptr<DBus::ObjectProxy> object;object = connection->create_object_proxy("dbuscxx.quickstart_0.server", "/dbuscxx/quickstart_0");// a method proxy acts like a real method, but will go over the dbus// to do its work.DBus::MethodProxy<double(double, double)> &add_proxy = *(object->create_method<double(double, double)>("dbuscxx.Quickstart", "add"));double answer;answer = add_proxy( 1.1, 2.2 );std::cout << "1.1 + 2.2 = " << answer << std::endl;return 0;
}

Makefile

.PHONY:cleanCXXFLAG			= -std=c++17 -O3
PKGFLAG         = `pkg-config --cflags --libs dbus-cxx-2.0`SERVER_SRC		= server.cpp
CLIENT_SRC		= client.cppSERVER_TARGET   = server
CLIENT_TARGET   = clientall:$(SERVER_TARGET) $(CLIENT_TARGET)$(SERVER_TARGET):$(SERVER_SRC)g++ $(CXXFLAG)  $(SERVER_SRC) -o $(SERVER_TARGET) $(PKGFLAG) $(CLIENT_TARGET):$(CLIENT_SRC)g++ $(CXXFLAG) $(CLIENT_SRC) -o $(CLIENT_TARGET) $(PKGFLAG)clean:@if [ -e "$(CLIENT_TARGET)" ] ; then \echo "rm $(CLIENT_TARGET)" ; \rm $(CLIENT_TARGET) ; \fi;@if [ -e "$(SERVER_TARGET)" ] ; then \echo "rm $(SERVER_TARGET)" ; \rm $(SERVER_TARGET) ; \fi;

运行结果

先运行 server & ,再运行 client
运行结果

接下来我打算对 server.cpp 从 dbus-cxx 源码进行分析,将开一篇新帖子。


http://chatgpt.dhexx.cn/article/F8mIJuCQ.shtml

相关文章

正点原子IIC例程讲解笔记(三)——24cxx.c中函数理解

目录 一、24C02 简介 二、在 AT24CXX 指定地址写入一个数据&#xff1a; 三、在ATC24XX指定地址读出一个数据 四、检查AT24CXX是否正常&#xff1a;u8 AT24CXX_Check(void) 五、在 AT24CXX 里面的指定地址开始写入长度为 Len 的数据 六、在 AT24CXX 里面的指定地址开始读出…

windows用VS2019下编译log4cxx日志库

一、下载相关库文件 获取log4cxx源码包&#xff1a;http://logging.apache.org/log4cxx/index.html 获取依赖库apr和apr-util源码包:http://archive.apache.org/dist/apr/apr-1.2.11-win32-src.zip http://archive.apache.org/dist/apr/apr-util-1.2.10-win32-src.zip 编译apr…

log4cxx编译

本人进行过win7 64位操作系统和win10家庭版的log4cxx编译&#xff0c;使用的是vs2015&#xff0c;下面是详情。 1.sed下载 sed-4.2.1-bin.zip、sed-4.2.1-dep.zip下载地址&#xff1a;http://gnuwin32.sourceforge.net/packages/sed.htm 下载后&#xff0c;将sed的两个压缩包解…

【RT-Thread Master】at24cxx软件包使用笔记

硬件介绍 RT-Thread版本&#xff1a;V4.1.0软件包名称&#xff1a;at24cxxMCU型号&#xff1a;AT32F407VET7EEPROM型号&#xff1a;AT24C16 使用说明 1、使用menuconfig将软件包添加进入工程&#xff0c;路径如下所示。 2、把IIC总线打开&#xff0c;这里使用软件IIC&#…

linux下编译和安装log4cxx,ubuntu下log4cxx安装使用

需要安装log4cxx&#xff0c;安装的过程中可是充满了坎坷。。。最大的问题是在make log4cxx时&#xff0c;总是报undefined XML什么什么的错误&#xff0c;查了一下也没解决了&#xff0c;然后把apr-utils删了重新装了一下就好了。。 log4cxx现在是apache的一个项目&#xff0c…

linux下编译和安装log4cxx,RedHat如何安装log4cxx日志库

log4cxx日志库是一种动态库&#xff0c;用于记录c的日志&#xff0c;那么RedHat系统下要如何安装log4cxx日志库呢&#xff1f;下面小编就给大家介绍下RedHat安装log4cxx日志库的步骤&#xff0c;感兴趣的朋友不妨来了解下吧。 首先&#xff0c;我得到信息&#xff0c;安装这个库…

AT24Cxx读写全面理解

AT24Cxx - 电可擦可写E2PROM 芯片介绍 基础介绍\引脚介绍 AT24Cxx系列EEPROM是由美国Mcrochip公司出品&#xff0c;1-512K位的支持I2C总线数据传送协议的串行CMOS E2PROM&#xff0c;可用电擦除&#xff0c;可编程自定时写周期&#xff08;包括自动擦除时间不超过10ms&#…

mongodb-cxx-driver使用

mongocxx driver 是构建在 MongoDB C driver 之上的 1.首先需要安装mongo-c-driver wget https://github.com/mongodb/mongo-c-driver/releases/download/ 1.23.1/mongo-c-driver-1.23.1.tar.gz tar xzf mongo-c-driver-1.23.1.tar.gz cd mongo-c-driver-1.23.1 mkdir cmak…

老胡的周刊(第095期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 tabby[2] 自托管的 AI 编码助手&#xff0c;…

程序员养生指北

吴小胖第八次推送 阅读时间预计3分钟~ 熬夜篇 互联网人熬夜是不能避免的&#xff0c;原因却各不相同。 不加班的时候&#xff0c;总会对自己说&#xff0c;今天一定早睡&#xff0c;然鹅... 午休篇 熬夜的程序员总想依靠午休补觉&#xff0c;然鹅... 更不幸的是&#xff0c;互联…

老杨说运维 | 中国IT运维市场的现状与趋势

文章内容来源《第一新声》 对擎创科技CEO杨辰(老杨)的专访 前言&#xff1a; 中国目前正面临百年未有之大变局&#xff0c;在这个变局中&#xff0c;不稳定性和不确定性正在增强。疫情持续反复、国际形势变化多端&#xff0c;导致国内多个行业出现发展增速下降、产供销节奏打…

老杨说运维 | 非常重要,事关转型

《荀子》有云&#xff1a;“水能载舟&#xff0c;亦能覆舟。”在公司日常运营过程中&#xff0c;数据指标就像是水&#xff0c;孕育着生命&#xff0c;承载着万物。科学的数据指标能指引公司在正确的道路上不断前进&#xff0c;使平淡无常的业务焕发新生&#xff0c;而不合理的…

学习springcloud的一些心得体会——老卫的天气预报系统

1&#xff1a;建立天气预报springboot系统 首先先建立一个天气预报的springboot系统&#xff0c;具体流程如下&#xff1a; &#xff08;1&#xff09;从cityList.xml中获取城市信息&#xff0c; &#xff08;2&#xff09;然后根据下面的链接获取各个城市的天气预报信息&am…

学习springboot项目的一些心得-----老卫的博客系统

去年年底接触了springboot框架&#xff0c;这两天复习了一遍&#xff0c;主要是跟着老卫博客系统这个课程学习的。 springboot介绍&#xff1a;总的感觉springboot就是基于spring开发的一套框架&#xff0c;好处就是不用配置复杂的依赖包&#xff0c;xml的一些文件&#xff0c…

thymeleaf和spring boot的集成踩坑总结(练习项目是老卫的博客项目)

bug1: 2019-08-08 16:44:38.102 ERROR 19810 — [nio-8080-exec-8] org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8080-exec-8] Exception processing template “users/list”: Error resolving template “users/list”, template might not exist or might not be …

《跟老卫学 HarmonyOS 开发》:以父之名・码力全开!写段 HarmonyOS 祝父亲节

#父亲节祝福语# 爸爸在我心中就像旗帜 他教会我做人与处事的方向 在父亲节这个特别的日子里 我想对爸爸说长大以后我就要成为您 使用ArkUI开发“父亲节的祝福” 使用ArkUI开发“父亲节的祝福”&#xff0c;效果如下&#xff1a; 使用DevEco Studio整体开发HarmonyOS整体时…

【老卫搞机】090期:键盘?主机?全功能键盘主机!

这是一台我个人DIY的第二代键盘主机&#xff08;第一代见&#xff1a;【老卫搞机】074期&#xff1a;键盘&#xff1f;主机&#xff1f;键盘主机&#xff01;_哔哩哔哩_bilibili&#xff09;。相比与第一代的作品&#xff0c;第二代产品除了USB 3接口、USB 2接口、mini HDMI接口…

【老卫拆书】009期:Vue+Node肩挑全栈!《Node.js+Express+MongoDB+Vue.js全栈开发实战》开箱

今天刚拿到一本新书&#xff0c;叫做《Node.jsExpressMongoDBVue.js全栈开发实战》&#xff0c;做个开箱。 外观 先从外观上讲&#xff0c;这本是全新的未开封的&#xff0c;膜还在。 这本书介绍从技术原理到整合开发实战&#xff0c;以丰富的项目展现全栈开发的一个技巧。 …

【老卫搬砖】034期:HarmonyOS 3.1 Beta 1初体验,我在本地模拟器里面刷短视频

今天啊打开这个DevEco Studio的话&#xff0c;已经提示有3.1Beta1版本的一个更新啊。然后看一下它的一些特性。本文也演示了如何在本地模拟器里面运行HarmonyOS版短视频。 主要特性 新特性包括&#xff1a; Added support for Windows 11 64-bit and macOS 13.x OSs, as well…

【老卫搞机】135期:华为开发者联盟社区2022年牛人之星奖品开箱!

首先祝大家兔年大吉&#xff0c;身体安康&#xff0c;钱兔似锦&#xff01;今天咱们来开箱一件特殊的奖品&#xff0c;来自华为开发者联盟社区的新年祝福——2022年牛人之星。 华为有钱&#xff01;惯例用的是顺丰快递&#xff0c;各位看一下这里面是有很多件的 有这两件。第一…