PCL 和 CMake 的问题:链接时未定义 StatisticalOutlierRemoval

Posted

技术标签:

【中文标题】PCL 和 CMake 的问题:链接时未定义 StatisticalOutlierRemoval【英文标题】:Issue with PCL and CMake : StatisticalOutlierRemoval undefined while linking 【发布时间】:2017-02-08 14:03:20 【问题描述】:

我目前正在尝试使用 PCL 过滤点云,这要归功于 StatisticalOutlierRemoval 而不使用 ROS,仅使用我通过 official github repository 安装的 PCL。我在代码中使用了this,但在链接时出现以下错误:

CMakeFiles/tests/11_pcl/removeOutliers.dir/removeOutliers.cpp.o: In function `pcl::StatisticalOutlierRemoval<pcl::PointXYZRGB>::applyFilter(std::vector<int, std::allocator<int> >&)':
removeOutliers.cpp:(.text._ZN3pcl25StatisticalOutlierRemovalINS_11PointXYZRGBEE11applyFilterERSt6vectorIiSaIiEE[_ZN3pcl25StatisticalOutlierRemovalINS_11PointXYZRGBEE11applyFilterERSt6vectorIiSaIiEE]+0x1): undefined reference to `pcl::StatisticalOutlierRemoval<pcl::PointXYZRGB>::applyFilterIndices(std::vector<int, std::allocator<int> >&)'
CMakeFiles/tests/11_pcl/removeOutliers.dir/removeOutliers.cpp.o:(.rodata._ZTVN3pcl25StatisticalOutlierRemovalINS_11PointXYZRGBEEE[_ZTVN3pcl25StatisticalOutlierRemovalINS_11PointXYZRGBEEE]+0x48): undefined reference to `pcl::StatisticalOutlierRemoval<pcl::PointXYZRGB>::applyFilter(pcl::PointCloud<pcl::PointXYZRGB>&)'

在我的 CMakeList 中,我有以下几行:

find_package(PCL 1.3 REQUIRED COMPONENTS common io visualization)
include_directories($PCL_INCLUDE_DIRS)
link_directories($PCL_LIBRARY_DIRS)
add_definitions($PCL_DEFINITIONS)

和:

add_executable(tests/11_pcl/removeOutliers removeOutliers.cpp)
target_link_libraries(tests/11_pcl/removeOutliers $PCL_LIBRARIES $OpenCV_LIBS)    

在我的 cpp 文件中,我只尝试使用以下方法初始化异常值删除:

pcl::StatisticalOutlierRemoval<pcl::PointXYZRGB> sor;

我有以下标题:

#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h>

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

我想我可能在 PCL 中缺少一个组件...有什么想法吗?

【问题讨论】:

【参考方案1】:

好的,我找到了解决方案。我实际上缺少 PCL 中的一个组件(过滤器)..

find_package(PCL 1.3 REQUIRED COMPONENTS common io visualization filters)

现在一切正常。

【讨论】:

以上是关于PCL 和 CMake 的问题:链接时未定义 StatisticalOutlierRemoval的主要内容,如果未能解决你的问题,请参考以下文章

CMake-FLANN库未生成(对于PCL库)

pcl总结

使用 cmake 时未创建调试符号

在哪里更改 cmake 变量值?

PCL Point-Cloud-Library cmake 安装错误 - OpenMP

程序找不到PCL的CMake files,catkin_make时报错