链接器错误与PCL 1.8.0项目

时间:2017-05-30 04:19:40

标签: c++ ld point-cloud-library flann

在重新编译和安装PCL 1.8.0之后,我的项目中出现了一些令人困惑的链接错误。有些类很好(我可以读取并渲染PC)但是只要我实例化其他类,我就会遇到链接器错误。

例如。

#include <pcl/point_types.h>
#include <pcl/filters/statistical_outlier_removal.h>

int main()
{
  pcl::StatisticalOutlierRemoval<pcl::PointXYZ> testObject;
}

在与PCL库中的约700个未定义引用链接时失败。在此示例中,大多数与libpcl_search.a和libpcl_recognition.a中的FLANN相关类相关。

/usr/local/lib/libpcl_search.a(kdtree.cpp.o):-1: In function `pcl::search::KdTree<pcl::PointXYZ, pcl::KdTreeFLANN<pcl::PointXYZ, flann::L2_Simple<float> > >::setSortedResults(bool)':

/home/Horatio/libs/pcl-pcl-1.8.0/search/include/pcl/search/impl/kdtree.hpp:65: error: undefined reference to `pcl::KdTreeFLANN<pcl::PointXYZ, flann::L2_Simple<float> >::setSortedResults(bool)'

CMake输出消息似乎表明它正在找到flann并且我没有任何问题编译任何一个库。我也尝试在我的Cmake中显式调用find_package(flann)但没有成功。

Checking for module 'flann'
  Found flann, version 1.8.4

我还在没有错误的情况下构建并运行了与过滤器类相关的PCL单元测试。

我能想到的唯一可能是相关的是我使用shared_libs = OFF构建了PCl,而cmake选择的flann库仍然是共享对象(* .so),尽管安装了* .a静态库。我无法让cmake正确识别它们。

我是否明确需要在新项目中链接静态库的共享依赖项?我认为静态链接的重点是(部分)减少共享依赖项的数量并增加可移植性?

非常感谢任何特定帮助或对相关信息的指示!

1 个答案:

答案 0 :(得分:1)

通过包含pcl/<module>/impl

下面的文件,我在使用PCL Normal Computation时解决了simialr问题

#include <pcl/search/impl/kdtree.hpp>

#include <pcl/kdtree/impl/kdtree_flann.hpp>

希望这有帮助。