首页 > 解决方案 > 如何在另一个 c++ 文件中声明 Paho MQTT C++?

问题描述

下面是我的项目结构,

root@user-VirtualBox:/home/user/octane_etk_sample-6.0.0.240# ls
bin                 include   paho.mqtt.c    speedway_embedded_example.cpp
cap                 lib       paho.mqtt.cpp  VERSION
cap_description.in  Makefile  SCMREV

我在项目目录中有 paho.mqtt.cpp 包,即octane_etk_sample-6.0.0.240,并且我已经安装了https://github.com/eclipse/paho.mqtt.cpp中提到的所有步骤。

现在,我在 speedway_embedded_example.cpp 中包含了 MQTTAsync 头文件,如下所示,

#include <iostream>
#include <string>
#include <algorithm>
#include <signal.h>
#include <stdio.h>
#include <cstdlib>
#include "ltkcpp.h"
#include "impinj_ltkcpp.h"
#include "time.h"


#include "/home/user/octane_etk_sample-6.0.0.240/paho.mqtt.c/src/MQTTAsync.h"

包含头文件后,我试图在公共类中建立 MQTT 客户端连接,

void
CMyApplication::printOneTagReportData (
  CTagReportData *              pTagReportData)
{
   string address = "tcp://mqtt1.mindlogic.com:1883";
   cout << "OK\n" << address;


   mqtt::async_client cli(address, "", 120, "data-persist");
}

当我尝试制作 speedway_embedded_example 文件时,出现以下错误,

root@user-VirtualBox:/home/mindlogic/octane_etk_sample-6.0.0.240# make
mkdir -p ./bin
g++ \
    -m32 -Wno-write-strings \
    -Iinclude \
    speedway_embedded_example.cpp \
    -Llib -lltkcpp_x86 -lltkcppimpinj_x86 -lxml2_x86 \
    -L/usr/bin -ldl -lssl -lcrypto \
    -o bin/speedwayr_x86
speedway_embedded_example.cpp: In member function ‘void CMyApplication::printOneTagReportData(LLRP::CTagReportData*)’:
speedway_embedded_example.cpp:1650:4: error: ‘mqtt’ has not been declared
    mqtt::async_client cli(address, "", 120, "data-persist");

有人会帮我在上述情况下建立客户端连接吗?

标签: c++armembeddedpaho

解决方案


您包括没有名称空间的 C 库。

您(可能)想要 C++ 库。

https://github.com/eclipse/paho.mqtt.cpp

或者更好的是,由于您包含嵌入式标签,您可能想要使用

https://github.com/eclipse/paho.mqtt.embedded-c

它具有 C 和 C++ 的嵌入式代码。您应该使用您正在使用的库提供的示例代码。


推荐阅读