2017-04-15 554 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

真棒 - 刚刚发布了使用该库的第一个测试消息:) –