Я хочу использовать библиотеку Eclipse Paho MQTT C в простой программе на C ++. Для библиотеки я использовал готовые двоичные файлы для Windows — см. https://projects.eclipse.org/projects/technology.paho/downloads
Я нашел точно такую же проблему в этом разговоре Ошибка LNK2019 при компиляции проекта Visual C ++ Win32 с Eclipse Paho MQTT.
Для связывания в include у меня есть следующие настройки:
Мой код выглядит следующим образом:
#include "stdafx.h"#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern "C" {
#include <MQTTClient.h>
#include <MQTTClientPersistence.h>
}
#define ADDRESS "xxx"#define CLIENTID "ExampleClientSub"#define TOPIC "xxx"#define PAYLOAD "Hello World!"#define QOS 1
#define TIMEOUT 10000L
int main()
{
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
int rc;
int ch;
MQTTClient_create(&client, ADDRESS, CLIENTID,
MQTTCLIENT_PERSISTENCE_NONE, NULL);
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
conn_opts.username = "roman.busse";
conn_opts.password = "VojUriLKhOsmzUJQ1lld";
MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered);
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc);
exit(EXIT_FAILURE);
}
printf("Subscribing to topic %s\nfor client %s using QoS%d\n\n""Press Q<Enter> to quit\n\n", TOPIC, CLIENTID, QOS);
MQTTClient_subscribe(client, TOPIC, QOS);
do
{
ch = getchar();
} while (ch != 'Q' && ch != 'q');
MQTTClient_unsubscribe(client, TOPIC);
MQTTClient_disconnect(client, 10000);
MQTTClient_destroy(&client);
return 0;
}
Как вы видите, я сказал компилятору: «Да, это C lib». Но в целом я получаю те же ошибки LNK2019 …
Код серьезности Описание Состояние подавления строки файла проекта
Ошибка LNK2019: неразрешенный внешний символ _MQTTClient_setCallbacks
ссылка в функции
_main paho_test C: \ Users \ rtreiber \ Documents \ visual studio 2017 \ Проекты \ paho_test \ paho_test \ paho_test.obj 1
Ошибка LNK2019: неразрешенный внешний символ _MQTTClient_create ссылается
в функции _main paho_test C: \ Users \ rtreiber \ Documents \ visual studio
2017 \ Проекты \ paho_test \ paho_test \ paho_test.obj 1
Ошибка LNK2019: неразрешенный внешний символ _MQTTClient_connect
ссылка в функции
_main paho_test C: \ Users \ rtreiber \ Documents \ visual studio 2017 \ Проекты \ paho_test \ paho_test \ paho_test.obj 1
Ошибка LNK2019: неразрешенный внешний символ _MQTTClient_disconnect
ссылка в функции
_main paho_test C: \ Users \ rtreiber \ Documents \ visual studio 2017 \ Проекты \ paho_test \ paho_test \ paho_test.obj 1
Ошибка LNK2019, неразрешенный внешний символ _MQTTClient_subscribe
ссылка в функции
_main paho_test C: \ Users \ rtreiber \ Documents \ visual studio 2017 \ Проекты \ paho_test \ paho_test \ paho_test.obj 1
Ошибка LNK2019, неразрешенный внешний символ _MQTTClient_unsubscribe
ссылка в функции
_main paho_test C: \ Users \ rtreiber \ Documents \ visual studio 2017 \ Проекты \ paho_test \ paho_test \ paho_test.obj 1
Ошибка LNK2019: неразрешенный внешний символ _MQTTClient_freeMessage
упоминается в функции «int __cdecl msgarrvd (void *, char *, int, struct
MQTTClient_message *) «(? Msgarrvd @@ YAHPAXPADHPAUMQTTClient_message @@@ Z) paho_test C: \ Users \ rtreiber \ documents \ visual
студия 2017 \ Projects \ paho_test \ paho_test \ paho_test.obj 1
Ошибка LNK2019: неразрешенный внешний символ _MQTTClient_free ссылается
в функции «int __cdecl msgarrvd (void *, char *, int, struct
MQTTClient_message *) «(? Msgarrvd @@ YAHPAXPADHPAUMQTTClient_message @@@ Z) paho_test C: \ Users \ rtreiber \ documents \ visual
студия 2017 \ Projects \ paho_test \ paho_test \ paho_test.obj 1
Ошибка LNK2019: неразрешенный внешний символ _MQTTClient_destroy
ссылка в функции
_main paho_test C: \ Users \ rtreiber \ documents \ visual studio 2017 \ Projects \ paho_test \ paho_test \ paho_test.obj 1 Ошибка LNK1120 9
неразрешенные внешние ссылки paho_test C: \ Users \ rtreiber \ documents \ visual
студия 2017 \ Projects \ paho_test \ Debug \ paho_test.exe 1
Так есть идеи?
Задача ещё не решена.
Других решений пока нет …