LINUX-ROS集成安装MQTT库步骤注意事项

环境信息

root@titan-ubuntu1:/home/mogo/data/jp/paho.mqtt.cpp# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.5 LTS
Release:        18.04
Codename:       bionic

步骤

安装doxygen

sudo apt install doxygen

构建 Paho C 库

在构建 C++ 库之前,首先构建并安装 Paho C 库(如果尚未存在)。请注意,此版本的 C++ 库需要 Paho C v1.3.13 或更高版本。

从 C++ v1.3.0 开始,Paho C 库的推荐版本作为子模块包含在存储库中。这可以与 C++ 库同时构建,从而简化了包的整体构建。

但是,如果您想手动构建 Paho C 库,可以按如下方式完成:

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>$ git clone https://github.com/eclipse/paho.mqtt.c.git
$ cd paho.mqtt.c
$ git checkout v1.3.13$ cmake -Bbuild -H. -DPAHO_ENABLE_TESTING=OFF -DPAHO_BUILD_STATIC=ON \-DPAHO_WITH_SSL=ON -DPAHO_HIGH_PERFORMANCE=ON
$ sudo cmake --build build/ --target install
$ sudo ldconfig
</code></span></span></span></span>

这将构建启用 SSL/TLS 的 C 库。如果不需要,请省略-DPAHO_WITH_SSL=ON.

它还使用 C 库的“高性能”选项来禁用更广泛的内部存储器检查。删除PAHO_HIGH_PERFORMANCE选项(即关闭它)以调试内存问题,但对于大多数生产系统,将其保留以获得更好的性能。

上面的代码会将库安装到主机上的默认位置,对于 Linux,通常是/usr/local. 要将库安装到非标准位置,请使用CMAKE_INSTALL_PREFIX指定位置。例如,要安装到用户主目录下的目录中(也许是为了本地测试),请执行以下操作:

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>$ cmake -Bbuild -H. -DPAHO_ENABLE_TESTING=OFF -DPAHO_BUILD_STATIC=ON \-DPAHO_WITH_SSL=ON -DPAHO_HIGH_PERFORMANCE=ON \-DCMAKE_INSTALL_PREFIX=$HOME/install</code></span></span></span></span>
构建 Paho C++ 库

PAHO_WITH_MQTT_C如果尚未安装 Paho C 库,则可以使用打开的CMake 选项一步构建推荐的版本以及 C++ 库。

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>$ git clone https://github.com/eclipse/paho.mqtt.cpp
$ cd paho.mqtt.cpp$ cmake -Bbuild -H. -DPAHO_WITH_MQTT_C=ON -DPAHO_BUILD_STATIC=ON \-DPAHO_BUILD_DOCUMENTATION=ON -DPAHO_BUILD_SAMPLES=ON
$ sudo cmake --build build/ --target install
$ sudo ldconfig
</code></span></span></span></span>

如果构建主机上有最新版本的 Paho C 库,并且已安装到默认位置,则无需再次构建。省略该PAHO_WITH_MQTT_C选项:

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>$ cmake -Bbuild -H. -DPAHO_BUILD_STATIC=ON \-DPAHO_BUILD_DOCUMENTATION=ON -DPAHO_BUILD_SAMPLES=ON
</code></span></span></span></span>

如果 Paho C 库安装到非默认位置,或者您想要针对不同版本进行构建,请使用CMAKE_PREFIX_PATH指定其安装位置。也许是这样的:

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>$ cmake -Bbuild -H. -DPAHO_BUILD_STATIC=ON \-DPAHO_BUILD_DOCUMENTATION=ON -DPAHO_BUILD_SAMPLES=ON \-DCMAKE_PREFIX_PATH=$HOME/install
</code></span></span></span></span>
构建 Debian/Ubuntu 软件包

.deb可以按如下方式创建Debian/Ubuntu 安装文件:

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>$ cmake -Bbuild -H. -DPAHO_WITH_SSL=ON -DPAHO_ENABLE_TESTING=OFF -DPAHO_BUILD_DEB_PACKAGE=ON
$ cmake --build build
$ (cd build && cpack)</code></span></span></span></span>

支持的网络协议

该库支持使用 TCP、SSL/TLS 和 Websockets(安全和不安全)连接到 MQTT 服务器/代理。这是通过提供给 connect() 调用的 URI 选择的。可以指定为:

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>"mqtt://<host>:<port>"   - TCP, unsecure"tcp://<host>:<port>"    (same)"mqtts://<host>:<port>"  - SSL/TLS"ssl://<host>:<port>"     (same)"ws://<host>:<port>"    - Unsecure websockets
"wss://<host>:<port>"   - Secure websockets
</code></span></span></span></span>

“mqtt://”和“tcp://”架构是相同的。它们表明 TCP 上的连接不安全。“mqtt://”变体对于库来说是新的,但在不同的 MQTT 库中变得越来越常见。

同样,“mqtts://”和“ssl://”架构是相同的。它们指定通过 SSL/TLS 套接字的安全连接。

请注意,要使用任何安全连接选项“mqtts://”、“ssl://”或“wss://”,您必须使用 CMake 选项编译库PAHO_WITH_SSL=ON以包含 OpenSSL。此外,您必须指定ssl_options当您连接到代理时,即您必须在调用时添加ssl_options一个connect_options实例connect()

Catch2单元测试

单元测试使用Catch2作为测试框架。支持版本 2.x 和 3.x。

Catch2可以在这里找到:Catch2

例子

示例应用程序可以在src/samples的源存储库中找到: https://github.com/eclipse/paho.mqtt.cpp/tree/master/src/samples

这是典型示例的部分示例:

int main(int argc, char* argv[])
{sample_mem_persistence persist;mqtt::client cli(ADDRESS, CLIENT_ID, &persist);callback cb;cli.set_callback(cb);auto connOpts = mqtt::connect_options_builder() .keep_alive_interval(20);.clean_session().finalize();try {cli.connect(connOpts);// First use a message pointer.mqtt::message_ptr pubmsg = mqtt::make_message(PAYLOAD1);pubmsg->set_qos(QOS);cli.publish(TOPIC, pubmsg);// Now try with itemized publish.cli.publish(TOPIC, PAYLOAD2, strlen(PAYLOAD2)+1, 0, false);// Disconnectcli.disconnect();}catch (const mqtt::persistence_exception& exc) {cerr << "Persistence Error: " << exc.what() << " ["<< exc.get_reason_code() << "]" << endl;return 1;}catch (const mqtt::exception& exc) {cerr << "Error: " << exc.what() << " ["<< exc.get_reason_code() << "]" << endl;return 1;}return 0;
}

这段代码需要:

Ian Craggs 等人的 Paho C 库。 GitHub - eclipse/paho.mqtt.c: An Eclipse Paho C client library for MQTT for Windows, Linux and MacOS. API documentation: https://eclipse.github.io/paho.mqtt.c/

如何确认包名 

​​​​​​​

根据您提供的安装输出信息,可以看出这是Paho MQTT C++库的安装过程。在这个输出中,包名是"PahoMqttCpp"。

这些安装文件是CMake相关的文件,用于在CMake项目中使用Paho MQTT C++库。其中包括:

  • PahoMqttCppTargets.cmake:包含Paho MQTT C++库的构建目标信息,用于在CMake项目中链接和使用该库。
  • PahoMqttCppTargets-noconfig.cmake:类似于上述文件,但不包含配置信息。
  • PahoMqttCppConfig.cmake:包含Paho MQTT C++库的配置信息,用于在CMake项目中找到和使用该库。
  • FindPahoMqttC.cmake:用于在CMake项目中查找和配置Paho MQTT C库的CMake模块文件。
  • PahoMqttCppConfigVersion.cmake:包含Paho MQTT C++库的版本信息。

这些文件的安装路径为/usr/local/lib/cmake/PahoMqttCpp/,其中PahoMqttCpp就是Paho MQTT C++库的包名。

请注意,这些文件是用于CMake项目的配置文件,并不直接对应于库的头文件或二进制文件。要在C++项目中使用Paho MQTT C++库,您需要在CMakeLists.txt文件中使用find_package命令来查找和链接Paho MQTT C++库,并在源代码中包含相应的头文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/212518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fcopy: 基于Coke实现内网大文件分发

在工作中&#xff0c;我曾与小伙伴讨论过这样一个实际问题&#xff1a;数据制作流程产生了一份需要上线的文件&#xff0c;而线上有数十台甚至上百台机器&#xff0c;有什么朴素的办法以尽可能快的速度将文件分发到指定的机器上吗&#xff1f;根据作者已有的知识&#xff0c;分…

普冉(PUYA)单片机开发笔记(5): 配置定时器PWM输出

概述 定时器的输出通道作为 PWM 驱动是 MCU 的常用功能。 PY32F003 有一个高级定时器 TIM1 和一个通用定时器 TIM3&#xff0c;这两个定时器都可以驱动4个输出通道。现在我们就利用 TIM1 的某一个通道实现可控占空比的 PWM 输出。 原理简介 看数据手册&#xff0c;简单摘录…

DM8/达梦 数据库管理员使用手册详解

1.1DM客户端存放位置 Windows&#xff1a;DM数据库安装目录中tool文件夹和bin文件夹中。 Linux&#xff1a;DM数据库安装目录中tool目录和bin目录中。 1.2DM数据库配置助手 1.2.1Windows创建数据库 打开数据库配置助手dbca 点击创建数据库实例 选择一般用途 浏览选择数据库…

图中的最长环

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是处于什么原因&#xff0c;算法学习需要持续保持&#xff0c;今天让我们一起来看看这一道题目————图中的最长环&#xff0c;图论题目中比较常见的环路…

C语言笔试例题_指针专练30题(附答案解析)

C语言笔试例题_指针专练30题(附答案解析) 指针一直是C语言的灵魂所在&#xff0c;是掌握C语言的必经之路&#xff0c;收集30道C语言指针题目分享给大家&#xff0c;测试环境位64位ubuntu18.04环境&#xff0c;如有错误&#xff0c;恳请指出&#xff0c;文明讨论&#xff01;&am…

基于SSM+JSP网上订餐管理系统(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

蓝桥杯2021年5月青少组Python程序设计国赛真题

30 个人在一条船上,超载&#xff0c;需要 15 人下船于是人们排成一队&#xff0c;排队的位置即为他们的编号。报数,从1开始,数到9的人下船。如此循环,直到船上仅剩15 人为止&#xff0c;问都有哪些编号的人下船了呢? 2】判断101-200之间有多少个素数&#xff0c;并输出所有素数…

Leetcode每日一题

https://leetcode.cn/problems/binary-tree-preorder-traversal/ 这道题目需要我们自行进行创建一个数组&#xff0c;题目也给出我们需要自己malloc一个数组来存放&#xff0c;这样能达到我们遍历的效果&#xff0c;我们来看看他的接口函数给的是什么。 可以看到的是这个接口函…

5_CSS三大特性盒子模型

第5章-盒子模型【比屋教育】 本课目标&#xff08;Objective&#xff09; 掌握CSS三大特性理解什么是盒子模型掌握内边距padding的用法掌握外边距margin的用法 1. CSS的层叠&#xff0c;继承&#xff0c;优先级 1.1 CSS层叠 层叠&#xff1a;是指多个CSS样式叠加到同一个元…

Web(8)SQL注入

Web网站&#xff08;对外门户&#xff09; 原理&#xff1a;not>and>or(优先级) 一.低级注入 order by的作用是对字段进行排序&#xff0c;如order by 5&#xff0c;根据第五个字段 进行排序&#xff0c;如果一共有4个字段&#xff0c;输入order by 5系统就会报错不 …

详细介绍开源固件-TF-A

什么是TF-A&#xff1f; TF-A&#xff08;Trusted Firmware-A&#xff09;是一种用于嵌入式系统的开源固件&#xff0c;而不是Linux的一部分。TF-A主要用于ARM架构的处理器和设备&#xff0c;它提供了一组安全和可信任的软件组件&#xff0c;用于引导和初始化系统。 如下是其…

GD32F30X-RT-Thread学习-线程管理

1. 软硬件平台 GD32F307E-START Board开发板MDK-ARM Keil 2.RT-Thread Nano 3.RT-Thread 内核学习-线程管理 ​ 在多线程操作系统中&#xff0c;可以把一个复杂的应用分解成多个小的、可调度的、序列化的程序单元&#xff0c;当合理地划分任务并正确地执行时&#xff0c;这…

qt可以详细写的项目或技术

1.QT 图形视图框架 2.QT 模型视图结构 3.QT列表显示大量信息 4.QT播放器 5.QT 编解码 6.QT opencv

Bypass open_basedir

讲解 open_basedir是php.ini中的一个配置选项&#xff0c;可用于将用户访问文件的活动范围限制在指定的区域。 假设open_basedir/var/www/html/web1/:/tmp/&#xff0c;那么通过web1访问服务器的用户就无法获取服务器上除了/var/www/html/web1/和/tmp/这两个目录以外的文件。…

洛谷 P8674 [蓝桥杯 2018 国 B] 调手表

文章目录 [蓝桥杯 2018 国 B] 调手表题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 题意解析CODE分析一下复杂度 [蓝桥杯 2018 国 B] 调手表 题目描述 小明买了块高端大气上档次的电子手表&#xff0c;他正准备调时间呢。 在 M78 星云&#xff0c;时间的计量…

JVM虚拟机:命令行查看JVM垃圾回收器的执行信息

在eclipse中打开命令行窗口 window->show view->Terminal 这样就打开了Terminal窗口&#xff0c;效果如下所示&#xff1a; java -XX:PrintCommandLineFlags -version 这个命令可以查看一些配置信息&#xff0c;其中最重要的配置信息就是&#xff0c;当前使用的G1回收器…

键盘打字盲打练习系列之成为大师——5

一.欢迎来到我的酒馆 盲打&#xff0c;成为大师&#xff01; 目录 一.欢迎来到我的酒馆二.关于盲打你需要知道三.值得收藏的练习打字网站 二.关于盲打你需要知道 盲打系列教程&#xff0c;终于写到终章了。。。一开始在看网上视频&#xff0c;看到up主熟练的打字技巧&#xff…

LabVIEW与Tektronix示波器实现电源测试自动化

LabVIEW与Tektronix示波器实现电源测试自动化 在现代电子测试与测量领域&#xff0c;自动化测试系统的构建是提高效率和精确度的关键。本案例介绍了如何利用LabVIEW软件结合Tektronix MDO MSO DPO2000/3000/4000系列示波器&#xff0c;开发一个自动化测试项目。该项目旨在自动…

MYSQL练题笔记-高级查询和连接-指定日期的产品价格

这依旧是中等题&#xff0c;想了好久&#xff0c;终于理解了很开心&#xff01; 一、题目相关内容 1&#xff09;相关的表和题目 2&#xff09;帮助理解题目的示例&#xff0c;提供返回结果的格式 二、自己初步的理解 题目是找出2019-08-16 时全部产品的价格&#xff0c;所以…

使用最小花费爬楼梯

1.状态表示 2.状态转移方程 3.初始化 保证填表时&#xff0c; 不越界 4.填表顺序 从左往右 5.返回值 解法2&#xff1a; 1.状态表示 2.状态转移方程 3.初始化 4.填表 从右往左 5.返回值 min( dp[0] , dp[1] ) ----------------------------------------------------…