我想将cpd(https://github.com/gadomski/cpd)的新c ++库添加到ROS中的一个项目。
我已经在Ubuntu OS中成功安装了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()的未定义引用
错误:未定义对`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}
...
关于c++ - C++:对ERROR的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30887991/