Я пытаюсь включить MQTT-C-Клиент-библиотека в простом проекте C ++.
Я включил заголовочный файл успешно, как это #include "MQTTClient.h"
, Компиляция этого в терминале linux печатала эти ошибки:
[xy@localhost mosquittoProject]$ sudo g++ *.cpp -o MQTTTest
/tmp/ccHn3s6m.o: In function `main':
mosquitto_test.cpp:(.text+0x11e): undefined reference to `MQTTClient_create'
mosquitto_test.cpp:(.text+0x13f): undefined reference to `MQTTClient_connect'
collect2: error: ld returned 1 exit status
Я понял, что мне нужно связать библиотеку после некоторого поиска в Google: Пример клиентского кода MQTT не работает C
Основываясь на этом вопросе и ответе, я попытался скомпилировать его снова так:
sudo g++ -L/home/xy/Desktop/paho.mqtt.c/build/output/ *.cpp -l paho-mqtt3c -o MQTTTest
Который компилируется нормально, но при запуске я получаю сообщение об ошибке.
Консольные команды и вывод:
[xy@localhost mosquittoProject]$ sudo g++ -L/home/xy/Desktop/paho.mqtt.c/build/output/ *.cpp -l paho-mqtt3c -o MQTTTest
[xy@localhost mosquittoProject]$ ./MQTTTest
./MQTTTest: error while loading shared libraries: libpaho-mqtt3c.so.1: cannot open shared object file: No such file or directory
Я заменил реальное имя пользователя на ху в этом посте.
Что я здесь не так делаю?
Проблема выглядит так, как будто библиотека (libpaho-mqtt3c.so.1) не находится на пути к библиотеке.
Похоже, что вы ссылаетесь на место сборки библиотеки и не установили ее в системное местоположение по умолчанию (например, / usr / local / lib), запустив sudo make install
,
По умолчанию в Linux компоновщик времени выполнения ищет местоположения, перечисленные в /etc/ld.so.conf
а также /etc/ld.so.conf.d
, если вы редактируете эти не забудьте запустить sudo ldconfig
обновить кеш.
Вы можете добавить местоположение библиотеки в переменную среды LD_LIBRARY_PATH, например:
$ LD_LIBRARY_PATH=/home/xy/Desktop/paho.mqtt.c/build/output/ ./MQTTTest
Других решений пока нет …