Я хочу добавить новую библиотеку c ++ из cpd (https://github.com/gadomski/cpd) к одному проекту в рос.
Я уже успешно установил библиотеку cpd в моей ОС Ubuntu.
Теперь я хочу использовать его в среде 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 :: Registration :: run (arma :: Mat const&, arma :: Mat const&) const ‘
Я полагаю, что библиотека cpd не связана с ROS. Я что-то неправильно сделал, чтобы вызвать библиотеку cpd?
undefined reference
ошибка компоновщика, а не ошибка компилятора Ваше использование include_directories()
все в порядке, но вы забыли также добавить ${CPD_LIBRARIES}
(1) (2) к target_link_libraries()
вашей цели.
(1): Просто предположите, что FindCPD.cmake «работает» так же, как и все остальные модули FindXyz.cmake. Сам никогда не работал с CPD.
(2): угадав из своего фрагмента, вам также нужно будет добавить ${OpenCV_LIBRARIES}
а также ${PCL_LIBRARIES}
…