在重新编译并安装 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 个 undefined reference 。在此示例中,大多数与 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 正确识别它们。
我是否明确需要在新项目中链接静态库的共享依赖项?我认为静态链接的目的(部分)是为了减少共享依赖项的数量并增加可移植性?
任何具体的帮助或一般相关信息的指示将不胜感激!
最佳答案
当我使用 PCL 正常计算时,我通过包含来自 pcl/<module>/impl
的以下文件解决了 simialr 问题。
#include <pcl/search/impl/kdtree.hpp>
#include <pcl/kdtree/impl/kdtree_flann.hpp>
希望这有帮助。
关于c++ - PCL 1.8.0 项目的链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44253353/