mqtt linux 编译,MQTT客户端代码X64位Ubuntu环境编译+测试实践小结

https://cloud.baidu.com/doc/IOT/IoTdownload.html#.E4.B8.8B.E8.BD.BDMQTT.E7.9B.B8.E5.85.B3

下载MQTT相关:

下载MQTT客户端代码示例

C代码示例:下载MQTT-c压缩包

//------------------------------------

MQTT-c编译过程记录:

编译流程大体按照MQTT-c文件夹的里头的"使用说明.txt"文件说明;

具体实践步骤如下:

1、下载开源代码 MQTT-c,注意,百度提供的库文件是基于X86平台的库文件,所以编译时需要用x64位的系统;

root@ubuntu:/home/linux/MQTT-c/lib# uname -a

Linux ubuntu 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux ---------->32位系统

root@Linux-host:/home/MQTT-c/lib# uname -a

Linux Linux-host 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed Aug 14 16:19:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ---------->64位系统

root@ubuntu:/home/linux/MQTT-c/lib# file libpaho-mqtt3cs.so

libpaho-mqtt3cs.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0xa7509e4c0208dca4c2989364c72f1555f79a579f, not stripped

如果不注意库文件版本与平台版本不对应的问题,后面用make命令后出现了:

/usr/bin/ld: skipping incompatible......

/usr/bin/ld: cannot find -lpaho-mqtt3cs

的问题,导致编译失败;

2、下载百度mqtt服务的pom认证文件[https://cloud.baidu.com/doc/IOT/IoTdownload.html#.E4.B8.8B.E8.BD.BDTLS.E8.AE.A4.E8.AF.81.E6.96.87.E4.BB.B6],把该root_cert.pem文件放入MQTT-c中

3、进入MQTT-c目录,修改Makefile文件中的LIB_PATH和INCLUDE_PATH路劲如下[假设MQTT-c文件夹放在路径/home/]

LIB_PATH = /home/MQTT-c/lib

INCLUDE_PATH = /home/MQTT-c/include

执行:make all,生成2个可执行文件pub和sub的可执行文件[PublisherSync和SubscriberSync],见图“1.编译完成.jpg”;

查看得知该2个文件也为64位版本:

root@Linux-host:/home/MQTT-c# file PublisherSync

PublisherSync: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x43187a758edceca1cd399ecd77d70649aadede64, not stripped

root@Linux-host:/home/MQTT-c# file SubscriberSync

SubscriberSync: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xbce55aab0f1fad937a531480355586f57ed9a1f6, not stripped

4、把MQTT-c/lib文件夹中的libpaho-mqtt3cs.so.1文件复制到/usb/lib下,不然执行以上2个可执行文件会提示libpaho-mqtt3cs.so.1文件找不到,

直接执行2个可执行文件,检查可执行文件是否可运行,见“2.文件可执行测试[程序打印出参数说明].jpg”,

./PublisherSync

./SubscriberSync

5、使用如下参数格式的命令,进行具体测试命令[注意:要先sub才能pub]:

pub:./PublisherSync  ssl://host:port topic message

sub:./SubscriberSync ssl://host:port topic

示例:

SubscriberSyn测试OK[跟百度物接入网页测试端配合]:

d681d1ef7384f746c3aeb24920fb1829.png

SubscriberSyn测试OK[跟百度物接入网页测试端配合]:

96cccb1d78b2ba721cd8680d3e989034.png

SubscriberSyn+PublisherSync同一台机子运行测试OK:

e68ccc8fd560d6a17c16c63d58af444f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu上,你可以使用 Eclipse Paho 这个 MQTT 客户端库来实现 MQTT 客户端。 以下是在 Ubuntu 上安装 Paho MQTT 客户端库的步骤: 1. 打开终端并更新本地软件包列表: ``` sudo apt-get update ``` 2. 安装 Paho MQTT 客户端库: ``` sudo apt-get install libssl-dev libcrypto++-dev libssl-doc sudo apt-get install libpaho-mqtt-dev ``` 3. 编写一个 MQTT 客户端代码,例如: ``` #include <iostream> #include <cstring> #include <cstdlib> #include <csignal> #include "mqtt/async_client.h" const std::string SERVER_ADDRESS { "tcp://localhost:1883" }; const std::string CLIENT_ID { "async_subcribe_cpp" }; class callback : public virtual mqtt::callback { void connection_lost(const std::string& cause) override { std::cout << "\nConnection lost" << std::endl; if (!cause.empty()) std::cout << "\tcause: " << cause << std::endl; } void delivery_complete(mqtt::delivery_token_ptr token) override {} mqtt::subscription_promise* sub_promise_; public: callback(mqtt::subscription_promise* sub_promise) : sub_promise_(sub_promise) {} void connected(const std::string& cause) override { std::cout << "Connection success" << std::endl; sub_promise_->set_value(0); } void message_arrived(mqtt::const_message_ptr msg) override { std::cout << "Message arrived" << std::endl; std::cout << "\ttopic: '" << msg->get_topic() << "'" << std::endl; std::cout << "\tpayload: '" << msg->to_string() << "'\n" << std::endl; } }; int main(int argc, char* argv[]) { mqtt::async_client client(SERVER_ADDRESS, CLIENT_ID); mqtt::connect_options connOpts; connOpts.set_keep_alive_interval(20); connOpts.set_clean_session(true); mqtt::subscription_promise sub_promise; mqtt::subscription_options subOpts; subOpts.set_no_local(true); subOpts.set_qos(1); callback cb(&sub_promise); client.set_callback(cb); try { std::cout << "Connecting to the MQTT server..." << std::endl; mqtt::token_ptr conntok = client.connect(connOpts); conntok->wait(); std::cout << "Connected" << std::endl; mqtt::token_ptr subtok = client.subscribe("test", subOpts); subtok->wait(); std::cout << "Subscribed to topic 'test'" << std::endl; sub_promise.get_future().wait(); while (true) {} } catch (const mqtt::exception& exc) { std::cerr << "MQTT Exception: " << exc.what() << std::endl; return 1; } return 0; } ``` 4. 编译并运行 MQTT 客户端代码: ``` g++ -o mqtt_client mqtt_client.cpp -lpaho-mqtt3a -lpaho-mqttpp3 ./mqtt_client ``` 以上代码实现了一个 MQTT 订阅者客户端,它将连接到本地主机上的 MQTT 代理,并订阅名为“test”的主题。当有新消息到达“test”主题时,客户端将输出消息的主题和有效负载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值