2016-12-21 7 views
1

В настоящее время я использую ROS Jade в Ubuntu 14.04 и пытаюсь создать MQTT Publisher для моего программного обеспечения Mosquitto. Тем не менее, я не могу правильно его создать с помощью catkin_make. В моем основном коде cpp я включил файл mosquitto.h. Извиняется за то, что я не могу опубликовать свой файл cpp так же, как и для рабочих целей.Mosquitto с ROS Jade undefined reference

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}) 

Ошибка

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 

Я сначала подумал, что произошла ошибка чтения файла заголовка, который я включал, но если бы это было так, то «нет такого файла ошибка каталога ". Функции, которые находились в «неопределенных ссылках», находятся в заголовочном файле, который я включил, не уверен, почему он еще не определен. Поблагодарили бы руководство, чтобы избавиться от неопределенной ссылки.

Большое спасибо!

[EDIT] Я получил код cpp для публикации MQTT со следующего сайта, вам нужно прокрутить страницу вниз. Благодаря! Программное обеспечение Mosquitto работает нормально. https://robomq.readthedocs.io/en/latest/MQTT/

ответ

0

Решено. При использовании Mosquitto мне пришлось связать клиентскую библиотеку с моим CMakeList. В основном файл libmosquitto.so, являющийся клиентской библиотекой.

Я добавил следующее в мой список CMake:

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

В этом случае это компоновщик, который не может найти объектные файлы, содержащие имена функций, отображаемые в выводе ошибки. Если вы не изменили этот файл CMake, я бы предположил, что необходимые объектные файлы не находятся в вашем/usr/lib каталоге, где находится компоновщик.

+0

файл mosquitto.h не в/USR/Lib, я использовал/USR/Lib реж во время догадку и метод проверки, чтобы получить код работает. Библиотеки (заголовки и исходные файлы) расположены в моей catkin/mqtt/include/lib. – cechsterRK

+0

Итак, это файл CMake, который поставляется с исходным кодом? – diametralpitch

 Смежные вопросы

  • Нет связанных вопросов^_^