PCL 1.8.0项目中的链接器错误
问题描述:
在全新编译和安装PCL 1.8.0之后,我在项目中发现了一些令人困惑的链接错误。有些类很好(我可以读取和渲染PC),但是当我实例化其他一些类时,我会遇到一些链接器错误。PCL 1.8.0项目中的链接器错误
例如。
#include <pcl/point_types.h>
#include <pcl/filters/statistical_outlier_removal.h>
int main()
{
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> testObject;
}
失败在约700未定义的引用从PCL库中进行链接。在这个例子中,大多数都涉及到从libpcl_search.a FLANN相关的类和libpcl_recognition.a
/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,尽管存在* .a静态库,但cmake选择的flann库仍然是共享对象(* .so)。我无法让cmake正确识别它们。
我是否明确需要在新项目中链接静态库的共享依赖关系?我认为静态链接的重点是(部分)减少共享依赖的数量并增加可移植性?
任何特定的帮助或指导一般相关的信息将不胜感激!
答
我有我使用PCL标准计算在通过包括以下文件从pcl/<module>/impl
#include <pcl/search/impl/kdtree.hpp>
#include <pcl/kdtree/impl/kdtree_flann.hpp>
希望这有助于解决simialr问题。