c ++:对ERROR的未定义引用

时间:2015-06-17 09:46:28

标签: c++ cmake ros cpd

我想将新的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库?

1 个答案:

答案 0 :(得分:3)

undefined reference是链接器错误,而不是编译器错误。您使用include_directories()即可,但是您忘了将${CPD_LIBRARIES}(1)(2)添加到目标的target_link_libraries()

(1):只是猜测FindCPD.cmake“工作”与所有其他FindXyz.cmake模块的工作方式相同。从未与CPD合作过。

(2):从您的代码段中猜测,您还需要添加${OpenCV_LIBRARIES}${PCL_LIBRARIES} ...