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.pswp.cn/news/212518.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212518.shtml
英文地址,請注明出處:http://en.pswp.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;這…