未定义的符号MQTTAsync_isConnected

时间:2018-02-25 17:30:48

标签: c++ mqtt ld paho

我正在开发一个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相关联,因为如果没有这个代码行,程序就会编译并运行......

你们有没有人知道为什么会出现这种错误?

1 个答案:

答案 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!进展... 同样,我不确定它是同一个问题,但也许它会给你一个提示。