2017-04-15 557 views
1

我正試圖在一個簡單的C++項目中包含MQTT-C-Client-Library。 我已經成功包含頭文件#include "MQTTClient.h"。在linux終端編譯它打印此錯誤:在C++項目中鏈接Paho C Mqtt庫錯誤

[[email protected] 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 

我想通了,我需要一些谷歌上搜索後,庫鏈接:基於這個問題Example MQTT Client Code not working C

,並回答我試圖重新編譯它像這樣:

sudo g++ -L/home/xy/Desktop/paho.mqtt.c/build/output/ *.cpp -l paho-mqtt3c -o MQTTTest

這編譯正常,但運行時,我仍然得到一個錯誤。 控制檯命令和輸出:

[[email protected] mosquittoProject]$ sudo g++ -L/home/xy/Desktop/paho.mqtt.c/build/output/ *.cpp -l paho-mqtt3c -o MQTTTest 
[[email protected] mosquittoProject]$ ./MQTTTest 
./MQTTTest: error while loading shared libraries: libpaho-mqtt3c.so.1: cannot open shared object file: No such file or directory 

我在這個崗位XY替換爲實際用戶名。

我在這裏做錯了什麼?

回答

2

問題看起來像庫(libpaho-mqtt3c.so.1)不是庫路徑上。

看起來您正在鏈接庫的構建位置,並且沒有通過運行sudo make install將其安裝到默認系統位置(例如/ usr/local/lib)。

默認情況下,在Linux上運行時鏈接程序會搜索/etc/ld.so.conf/etc/ld.so.conf.d列出的位置。如果您編輯這些記得運行sudo ldconfig來更新緩存。

您可以添加庫的位置PATH環境變量例如爲:

$ LD_LIBRARY_PATH=/home/xy/Desktop/paho.mqtt.c/build/output/ ./MQTTTest 
+0

真棒 - 剛剛發佈了使用該庫的第一個測試消息:) –