Я хочу использовать библиотеку 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». Но в целом я получаю те же ошибки LNK2019 ...
Severity Code Description Project File Line Suppression State Error LNK2019 unresolved external symbol _MQTTClient_setCallbacks referenced in function _main paho_test C:\Users\rtreiber\documents\visual studio 2017\Projects\paho_test\paho_test\paho_test.obj 1
Error LNK2019 unresolved external symbol _MQTTClient_create referenced in function _main paho_test C:\Users\rtreiber\documents\visual studio 2017\Projects\paho_test\paho_test\paho_test.obj 1
Error LNK2019 unresolved external symbol _MQTTClient_connect referenced in function _main paho_test C:\Users\rtreiber\documents\visual studio 2017\Projects\paho_test\paho_test\paho_test.obj 1
Error LNK2019 unresolved external symbol _MQTTClient_disconnect referenced in function _main paho_test C:\Users\rtreiber\documents\visual studio 2017\Projects\paho_test\paho_test\paho_test.obj 1
Error LNK2019 unresolved external symbol _MQTTClient_subscribe referenced in function _main paho_test C:\Users\rtreiber\documents\visual studio 2017\Projects\paho_test\paho_test\paho_test.obj 1
Error LNK2019 unresolved external symbol _MQTTClient_unsubscribe referenced in function _main paho_test C:\Users\rtreiber\documents\visual studio 2017\Projects\paho_test\paho_test\paho_test.obj 1
Error LNK2019 unresolved external symbol _MQTTClient_freeMessage referenced in function "int __cdecl msgarrvd(void *,char *,int,struct MQTTClient_message *)" (?msgarrvd@@YAHPAXPADHPAUMQTTClient_message@@@Z) paho_test C:\Users\rtreiber\documents\visual studio 2017\Projects\paho_test\paho_test\paho_test.obj 1
Error LNK2019 unresolved external symbol _MQTTClient_free referenced in function "int __cdecl msgarrvd(void *,char *,int,struct MQTTClient_message *)" (?msgarrvd@@YAHPAXPADHPAUMQTTClient_message@@@Z) paho_test C:\Users\rtreiber\documents\visual studio 2017\Projects\paho_test\paho_test\paho_test.obj 1
Error LNK2019 unresolved external symbol _MQTTClient_destroy referenced in function _main paho_test C:\Users\rtreiber\documents\visual studio 2017\Projects\paho_test\paho_test\paho_test.obj 1 Error LNK1120 9 unresolved externals paho_test C:\Users\rtreiber\documents\visual studio 2017\Projects\paho_test\Debug\paho_test.exe 1
Итак, есть идеи?
Я отредактировал ошибки компоновщика, я просмотрел библиотеку и каждую функцию, импортированную с помощью "DLLExport". У меня есть DLL в папке со статическими библиотеками и в папке с исполняемым файлом. Я даже пробовал добавить его как переменную пути -
Новый вывод: если я использую 32-битные двоичные файлы, я могу собрать программу, но ее нельзя запустить, потому что программа работает в 64-битной системе ...
Измените вопрос, включив в него полный текст ошибок.