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;简单摘录…

激活函数数学详解以及应用场景解释

文章目录 激活函数1. Sigmoid 激活函数例子及推导过程代码 2. ReLU 激活函数例子及推导过程 3. Tanh 激活函数例子及推导过程代码 4. Softmax 激活函数例子及推导过程代码 CNN 中的卷积层工作原理卷积计算过程卷积后的输出及 ReLU 应用 激活函数 激活函数在神经网络中扮演着至…

IPSec 协议

在 TCP/IP 协议中&#xff0c;对 IP 数据包没有提供任何安全保护&#xff0c;攻击者可以通过网络嗅探、 IP 欺骗、连接截获等方法来攻击正常的 TCP/IP 通信。因此&#xff0c;通信过程中会存在以下危险&#xff1a;数据并非来自合法的发送者、数据在传输过程中被非法篡改、信息…

前端知识(十七)——入口函数和特定函数的区别

入口函数和特定函数是编程中常见的两种函数类型&#xff0c;它们在功能和使用场景上有所不同。下面我将通过Python代码示例来解释它们的区别。 1.入口函数&#xff1a;入口函数通常是一个程序或模块的起始点&#xff0c;它负责接收用户输入或外部数据&#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;图论题目中比较常见的环路…

vite+TypeScript+vue3+router4+Pinia+ElmPlus+axios+mock项目基本配置

1.viteTSVue3 npm create vite Project name:... yourProjectName Select a framework:>>Vue Select a variant:>>Typescrit2. 修改vite基本配置 配置 Vite {#configuring-vite} | Vite中文网 (vitejs.cn) vite.config.ts import { defineConfig } from vite …

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;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

Flask笔记三之连接使用数据库

本文首发于公众号&#xff1a;Hunter后端 原文链接&#xff1a;Flask笔记三之连接使用数据库 这一节介绍 Flask 与数据库的连接&#xff0c;以及接口里查询数据的操作。 这里使用的是 SQLAlchemy pymysql 实现与数据库的连接&#xff0c;SQLAlchemy 的详细介绍见之前的笔记有…

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

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

Maven上传Jar到Nexus远程仓库的两种方式

Maven上传Jar到Nexus远程仓库的两种方式 文章目录 前言通过mvn clean deploy指令上传第一步 配置maven的setting.xml文件第二步 配置pom文件第三步 执行打包指令 手动上传 jar到远程仓库第一步 配置setting文件第二步 执行上传命令 前言 各个公司在开发项目时&#xff0c;一般…

Linux C/C++并发编程实战(8)CAS机制的ABA问题

文章目录 无锁队列中的ABA问题ABA问题解决方案 ABA问题&#xff1a;CAS在操作的时候会检查变量的值是否被更改过&#xff0c;如果没有则更新值&#xff0c;但是带来一个问题&#xff0c;最开始的值是A&#xff0c;接着变成B&#xff0c;最后又变成了A。经过检查这个值确实没有修…

Leetcode每日一题

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

说说webpack中常见的loader?解决了什么问题?

在Webpack中&#xff0c;Loader是用于处理各种文件类型的模块加载器&#xff0c;它们用于对文件进行转换、处理和加载。常见的Loader解决了以下问题&#xff1a; 处理 JavaScript 文件&#xff1a;Babel Loader用于将最新的JavaScript语法转译为浏览器兼容的版本&#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;这…