环境信息
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++库,并在源代码中包含相应的头文件。