我想将新的cpd文件库(https://github.com/gadomski/cpd)添加到ROS中的一个项目中。 我已经在我的Ubuntu操作系统中成功安装了cpd库。
现在我想在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()&#39;
错误:未定义引用`cpd :: Registration :: run(arma :: Mat const&amp;,arma :: Mat const&amp;)const&#39;
我认为cpd库没有链接到ROS,我是否做错了调用cpd库?
答案 0 :(得分:3)
undefined reference
是链接器错误,而不是编译器错误。您使用include_directories()
即可,但是您忘了将${CPD_LIBRARIES}
(1)(2)添加到目标的target_link_libraries()
。
(1):只是猜测FindCPD.cmake“工作”与所有其他FindXyz.cmake模块的工作方式相同。从未与CPD合作过。
(2):从您的代码段中猜测,您还需要添加${OpenCV_LIBRARIES}
和${PCL_LIBRARIES}
...