我想将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/

10-11 18:20