我正在开发一个IoT C ++应用程序,我想通过MQTT发送数据。因此,我根据自己的特殊需求创建了一个标题类:
#include <mqtt/client.h>
class ClientMQTT{
public:
ClientMQTT();
ClientMQTT(std::string _mqtt_ip_address, int _mqtt_port, std::string _mqtt_username, std::string _mqtt_password, std::string _client_id, bool no_publish);
int mqtt_send(char *message, int msg_length, std::string topic);
void report_error(std::string timestamp, std::string message);
bool connect();
bool disconnect();
mqtt::client *client;
std::string mqtt_ip_address;
int mqtt_port;
std::string mqtt_username;
std::string mqtt_password;
std::string client_id;
bool no_publish;
};
对于(dis)连接,我创建了两个函数,我可以在程序启动和退出时调用bool connect()
和bool disconnect()
。身体看起来像这样:
bool ClientMQTT::disconnect(){
if(this->client == NULL) return true;
this->client->disconnect();
return !(this->client->is_connected()); //this makes problems!
}
断开连接时,我需要检查MQTT客户端是否确实已断开连接。所以我打电话给virtual bool mqtt::client::is_connected()
函数。
问题是,编译/链接时出现以下错误: /usr/bin/ld: obj/Debug/CAN_Reader.o||undefined reference to symbol 'MQTTAsync_isConnected'
但是我将MQTT-Library与-lpaho-mqttpp3
相关联,因为如果没有这个代码行,程序就会编译并运行......
你们有没有人知道为什么会出现这种错误?
答案 0 :(得分:0)
我认为尝试使用相同的MQTT Paho C ++代码时遇到了同样的错误。但我在Windows上使用VS 2015,所以我认为这与你有所不同?对我来说,问题出在MQTTAsync.h中。在第95行,代码检测它是否是Windows环境。在这种情况下,它错过了它,并认为我在Linux上。这没有用:
devtools::install_github("tidyverse/glue")
我做到了
#if defined(WIN32) || defined(WIN64)
最后一个似乎是一个很好的定义。这会影响它是否使用&#34; declspec&#34; (Windows)或&#34;属性&#34; (linux)访问库。在那之后,我猜测它可以更好地读取我的Windows库。所以我从170错误下降到只有36!进展... 同样,我不确定它是同一个问题,但也许它会给你一个提示。