Неопределенная ссылка на символ MQTTAsync_isConnected

Я разрабатываю приложение 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-библиотеку с -lpaho-mqttpp3, потому что без этой строки кода, программа компилируется и работает …

Кто-нибудь из вас знает, почему возникает эта ошибка?

0

Решение

У меня была та же ошибка, когда я пытался использовать тот же код MQTT Paho C ++. Но я использую VS 2015 на Windows, так что я думаю, что это отличается от вас? Для меня проблема была в MQTTAsync.h. В строке 95 код определяет, является ли это средой Windows. В этом случае он пропустил это и думал, что я был на Linux. Это не сработало:

#if defined(WIN32) || defined(WIN64)

Я сделал это быть

#if defined(WIN32) || defined(WIN64) || defined(_WIN32)

И этот последний, кажется, хорошее определение. Это влияет на то, использует ли он «declspec» (Windows) или «attribute» (linux) для доступа к библиотеке. После этого, я думаю, он мог бы лучше читать мою библиотеку Windows. Таким образом, я сократил количество ошибок с 170 до 36! Прогресс…
Опять же, я не уверен, что это та же проблема, но, возможно, это даст вам подсказку.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]