c++ - PCL 1.8.0 项目的链接器错误

标签 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 个 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/

相关文章:

c++ - 使用 libjpeg 解码期间的无损 JPEG 旋转

c++ - 替换字符串中的子字符串 (c++)

C++浮点减法似乎没有发生

c - 在 GCC 编译中隐藏函数名称

c++ - 在 Windows 上链接可执行文件的正确方法是什么?

gcc - 在编译期间告诉 ld 在哪里寻找依赖的共享库

cmake - 错误:Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)

opencv - 使用 Kinect 进行 3D 对象跟踪检测

c++ - 关于使用 Std::List 作为类成员变量的奇怪错误

c++ - 法线估计曲率场返回 NAN