c++: 未定义的错误引用

c++: Undefined reference to ERROR

我想在 ROS 中的一个项目中添加新的 cpd c++ 库 (https://github.com/gadomski/cpd)。 我已经在 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::运行(arma::Mat const&, arma::Mat const&) const'的引用

我想 cpd 库没有链接到 ROS,我调用 cpd 库是不是做错了什么?

undefined reference 是链接器错误,不是编译器错误。您使用 include_directories() 没问题,但您忘记将 ${CPD_LIBRARIES} (1)(2) 添加到目标的 target_link_libraries() 中。


(1):只是猜测 FindCPD.cmake "works" 与所有其他 FindXyz.cmake 模块的方式相同。我自己从未使用过 CPD。

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