2016-12-21 5 views
1

Ich benutze derzeit ROS Jade in Ubuntu 14.04 und versuche, einen MQTT Publisher zu meiner Mosquitto Software zu erstellen. Ich kann es jedoch nicht korrekt über catkin_make erstellen. In meinem Haupt-cpp-Code habe ich die "mosquitto.h" -Datei eingefügt. Entschuldigung, dass ich meine cpp-Datei nicht so veröffentlichen kann, wie es für Arbeitszwecke ist.Mosquitto mit ROS Jade undefined Referenz

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3) 

find_package(catkin REQUIRED COMPONENTS 
roscpp 
rospy 
std_msgs 
) 

catkin_package(
INCLUDE_DIRS include 
LIBRARIES mqtt 
CATKIN_DEPENDS roscpp std_msgs 
DEPENDS system_lib 
) 

set(MOSQ_LIB_LOCATIONS 
/usr/lib 
) 

set(INCLUDE_HEADER_FILES 
src/mosquitto.h 
#include/lib/cpp/mosquittopp.h 
) 

include_directories(
${catkin_INCLUDE_DIRS} 
${mosquitto_INCLUDE_DIRS} 
/home/catkin_ws/src/mqtt/include/lib 
/home/catkin_ws/src/mqtt/include/lib/cpp 
) 

add_executable(mqtt src/mqtt.transmit.cpp ${INCLUDE_HEADER_FILES} ${MOSQ_LIB_LOCATIONS}) 
target_link_libraries(mqtt ${catkin_LIBRARIES}) 

Fehler

mqtt.transmit.cpp:(.text+0x1f8): undefined reference to `mosquitto_lib_init' 
mqtt.transmit.cpp:(.text+0x210): undefined reference to `mosquitto_new' 
mqtt.transmit.cpp:(.text+0x237): undefined reference to `mosquitto_username_pw_set' 
mqtt.transmit.cpp:(.text+0x259): undefined reference to `mosquitto_connect' 
mqtt.transmit.cpp:(.text+0x285): undefined reference to `mosquitto_loop_start' 
mqtt.transmit.cpp:(.text+0x2bc): undefined reference to `mosquitto_publish' 
mqtt.transmit.cpp:(.text+0x2d0): undefined reference to `mosquitto_loop_stop' 
mqtt.transmit.cpp:(.text+0x2df): undefined reference to `mosquitto_disconnect' 
mqtt.transmit.cpp:(.text+0x2ee): undefined reference to `mosquitto_destroy' 
mqtt.transmit.cpp:(.text+0x2f3): undefined reference to `mosquitto_lib_cleanup' 
collect2: error: ld returned 1 exit status 

Ich dachte zunächst, dass es ein Fehler war, die Header-Datei zu lesen, die ich eingeschlossen, aber wenn das der Fall ist, die „keine solche Datei Verzeichnis "Fehler würde auftreten. Die Funktionen, die in den "undefined Referenzen" waren, befinden sich in der Header-Datei, die ich eingefügt habe, nicht sicher, warum es noch nicht definiert ist. Würde die Anleitung schätzen, um die undefinierte Referenz loszuwerden.

Vielen Dank!

[EDIT] Ich habe die MQTT Publishing cpp-Code von der folgenden Website, müssen Sie nach unten scrollen. Vielen Dank! Mosquitto Software funktioniert gut. https://robomq.readthedocs.io/en/latest/MQTT/

Antwort

0

Gelöst. Bei der Verwendung von Mosquitto musste ich die Client-Bibliothek in meiner CMakeList verlinken. Grundsätzlich die Datei libmosquitto.so, die die Client-Bibliothek ist.

ich folgendes meiner Cmake Liste hinzugefügt:

set(Mosquitto_libs 
    /usr/lib/x86_64-linux-gnu/libmosquitto.so 
    /usr/lib/x86_64-linux-gnu/libmosquitto.so.1 
) 
target_link_libraries(mqtt_pub_node ${catkin_LIBRARIES} ${Mosquitto_libs}) 
0

In diesem Fall kann der Linker die Objektdateien nicht finden, die die in der Fehlerausgabe angezeigten Funktionsnamen enthalten. Wenn Sie diese CMake-Datei nicht geändert haben, würde ich annehmen, dass sich die notwendigen Objektdateien nicht in Ihrem/usr/lib-Verzeichnis befinden, wo der Linker gerade sucht.

+0

die mosquitto.h Datei nicht im Verzeichnis/usr/lib, habe ich das Verzeichnis/usr/lib dir während einer Vermutung und überprüfen Methode das bekommen Code funktioniert. Die Bibliotheken (Header und Quelldateien) befinden sich in meinem catkin/mqtt/include/lib. – cechsterRK

+0

Also ist das die CMake-Datei, die mit dem Quellcode geliefert wurde? – diametralpitch