2015-06-17 1 views
0

Я хочу добавить новую библиотеку C++ cpd (https://github.com/gadomski/cpd) в один проект в ROS. Я уже установил библиотеку cpd в своей ОС Ubuntu.C++: Неопределенная ссылка на ERROR

Теперь я хочу использовать его в среде ROS.

В файле CMakeList.txt, я уже добавил линию

find_package(CPD REQUIRED) 

include_directories(include 
    ${catkin_INCLUDE_DIRS} 
    ${OpenCV_INCLUDE_DIR} 
    ${PCL_INCLUDE_DIRS} 
    ${CPD_INCLUDE_DIRS} 
) 

target_link_libraries(background_removal 
    ${catkin_LIBRARIES} 
    ${OpenCV_LIBRARIES} 
    ${PCL_LIBRARIES} 
    ${CPD_LIBRARIES} 
) 

затем в исходном коде я добавил

#include <cpd/nonrigid_lowrank.hpp> 

, а также пример кода

cpd::NonrigidLowrank reg; 
cpd::Registration::ResultPtr result = reg.run(X, Y); 

Но после его компиляции он выдает ошибку: неопределенная ссылка на `cpd :: NonrigidLowrank :: NonrigidLowrank() '

Ошибка: неопределенная ссылка на `CPD :: Регистрация :: бега (арма :: Mat Const &, арма :: Mat Const &) Const»

Я полагаю, что библиотека ППР не связана с РОС , Я сделал что-то неправильно, чтобы вызвать библиотеку cpd?

ответ

3

undefined reference - ошибка компоновщика, а не ошибка компилятора. Ваше использование include_directories() в порядке, но вы забыли также добавить ${CPD_LIBRARIES} (1) (2) в target_link_libraries() ваших целей.


(1): Просто угадать, что FindCPD.cmake "работает" так же, как и все другие модули FindXyz.cmake. Никогда не работал с CPD.

(2): Гадание с вашего фрагмента кода, вам также необходимо добавить ${OpenCV_LIBRARIES} и ${PCL_LIBRARIES} ...

+0

эй, ТНХ для вашего ответа. Я сделал добавить target_link_libraries в моем файле CMakeList target_link_libraries (background_removal $ {catkin_LIBRARIES} $ {OpenCV_LIBRARIES} $ {PCL_LIBRARIES} $ {CPD_LIBRARIES} ) Но это не сработало, без использования ДСП, Я могу успешно запустить его с помощью OpenCV, PCL. – ZYJ

+0

Ну, обычный материал: 'message (" CPD_LIBARIES: $ {CPD_LIBRARIES} ")', 'grep' для сообщений с отсутствующими символами в этих библиотеках ... недостаточно информации здесь, чтобы дать более точные советы. – DevSolar

+0

Вы правы, в символе нет значения, оно пустое. поэтому он фактически не находит cpd libary ... – ZYJ