zoukankan      html  css  js  c++  java
  • 【bug未解决】PCL将点云写入pcd文件遇到报错

    背景:

    1. 电脑配置:ubuntu16.04, gcc 5.4.0, C++11/14, pcl-1.7.2

    2. 将点云写入pcd文件。报错如下,

    报错信息:

    CMakeFiles/xag_nav_map_display.dir/src/pcl/pointcloud_io.cc.o: In function `pcl::PCDWriter::write(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, bool)':
    /usr/include/pcl-1.7/pcl/io/pcd_io.h:351: undefined reference to `pcl::PCDWriter::writeBinary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&)'
    /usr/include/pcl-1.7/pcl/io/pcd_io.h:353: undefined reference to `pcl::PCDWriter::writeASCII(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, int)'
    CMakeFiles/xag_nav_map_display.dir/src/pcl/pointcloud_io.cc.o: In function `int pcl::PCDWriter::writeASCII<pcl::PointXYZ>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PointCloud<pcl::PointXYZ> const&, int)':
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:486: undefined reference to `pcl::PCDWriter::setLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:598: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:613: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    CMakeFiles/xag_nav_map_display.dir/src/pcl/pointcloud_io.cc.o: In function `int pcl::PCDWriter::writeBinary<pcl::PointXYZ>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PointCloud<pcl::PointXYZ> const&)':
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:157: undefined reference to `pcl::PCDWriter::setLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:193: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:194: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:204: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:213: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:247: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:258: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    collect2: error: ld returned 1 exit status
    xag_nav_map_display/CMakeFiles/xag_nav_map_display.dir/build.make:331: recipe for target '/home/gordon/ros_ws/devel/lib/xag_nav_map_display/xag_nav_map_display' failed
    make[2]: *** [/home/gordon/ros_ws/devel/lib/xag_nav_map_display/xag_nav_map_display] Error 1
    CMakeFiles/Makefile2:500: recipe for target 'xag_nav_map_display/CMakeFiles/xag_nav_map_display.dir/all' failed
    make[1]: *** [xag_nav_map_display/CMakeFiles/xag_nav_map_display.dir/all] Error 2
    make[1]: *** Waiting for unfinished jobs....
    CMakeFiles/xag_nav_map_playlog.dir/src/pcl/pointcloud_io.cc.o: In function `pcl::PCDWriter::write(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, bool)':
    /usr/include/pcl-1.7/pcl/io/pcd_io.h:351: undefined reference to `pcl::PCDWriter::writeBinary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&)'
    /usr/include/pcl-1.7/pcl/io/pcd_io.h:353: undefined reference to `pcl::PCDWriter::writeASCII(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, int)'
    CMakeFiles/xag_nav_map_playlog.dir/src/pcl/pointcloud_io.cc.o: In function `int pcl::PCDWriter::writeASCII<pcl::PointXYZ>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PointCloud<pcl::PointXYZ> const&, int)':
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:486: undefined reference to `pcl::PCDWriter::setLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:598: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:613: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    CMakeFiles/xag_nav_map_playlog.dir/src/pcl/pointcloud_io.cc.o: In function `int pcl::PCDWriter::writeBinary<pcl::PointXYZ>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PointCloud<pcl::PointXYZ> const&)':
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:157: undefined reference to `pcl::PCDWriter::setLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:193: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:194: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:204: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:213: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:247: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:258: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    collect2: error: ld returned 1 exit status
    xag_nav_map_display/CMakeFiles/xag_nav_map_playlog.dir/build.make:331: recipe for target '/home/gordon/ros_ws/devel/lib/xag_nav_map_display/xag_nav_map_playlog' failed
    make[2]: *** [/home/gordon/ros_ws/devel/lib/xag_nav_map_display/xag_nav_map_playlog] Error 1
    CMakeFiles/Makefile2:1149: recipe for target 'xag_nav_map_display/CMakeFiles/xag_nav_map_playlog.dir/all' failed
    make[1]: *** [xag_nav_map_display/CMakeFiles/xag_nav_map_playlog.dir/all] Error 2
    CMakeFiles/xag_nav_map_playback.dir/src/pcl/pointcloud_io.cc.o: In function `pcl::PCDWriter::write(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, bool)':
    /usr/include/pcl-1.7/pcl/io/pcd_io.h:351: undefined reference to `pcl::PCDWriter::writeBinary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&)'
    /usr/include/pcl-1.7/pcl/io/pcd_io.h:353: undefined reference to `pcl::PCDWriter::writeASCII(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, int)'
    CMakeFiles/xag_nav_map_playback.dir/src/pcl/pointcloud_io.cc.o: In function `int pcl::PCDWriter::writeASCII<pcl::PointXYZ>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PointCloud<pcl::PointXYZ> const&, int)':
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:486: undefined reference to `pcl::PCDWriter::setLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:598: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:613: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    CMakeFiles/xag_nav_map_playback.dir/src/pcl/pointcloud_io.cc.o: In function `int pcl::PCDWriter::writeBinary<pcl::PointXYZ>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pcl::PointCloud<pcl::PointXYZ> const&)':
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:157: undefined reference to `pcl::PCDWriter::setLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:193: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:194: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:204: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:213: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:247: undefined reference to `pcl::PCDWriter::resetLockingPermissions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp:258: undefined reference to ` pcl::PCDWriter::resetLockingPermissions (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::interprocess::file_lock&)'
    collect2: error: ld returned 1 exit status

    报错信息中的关键点

     undefined reference to  表示函数有声明,但未找到定义。

     collect2: error: ld returned 1 exit status  表示库链接错误。

    关于问题解决的猜想:

    1. 编译器gcc的版本问题,综合以下2个网址,可能需要匹配gcc-5.0

    https://blog.csdn.net/sunshinefcx/article/details/84135794

    https://stackoverflow.com/questions/37004976/undefined-reference-to-processstd-cxx11basic-string-when-compiling-a

    2. 查看  /usr/include/pcl-1.7/pcl/io/pcd_io.h  和  /usr/include/pcl-1.7/pcl/io/impl/pcd_io.hpp ,确实无法进入相应的函数:  pcl::PCDWriter::resetLockingPermissions 和  pcl::PCDWriter::setLockingPermissions 。

    推测缺乏相应的函数实现。

  • 相关阅读:
    最短路径问题大总结(提纲)
    单源最短路——Bellman-Ford算法
    多源最短路——Floyd算法
    Bracket Sequences Concatenation Problem括号序列拼接问题(栈+map+思维)
    数位DP
    C++ string中的find()函数
    Planning The Expedition(暴力枚举+map迭代器)
    8月5号团队赛补题
    8月3号水题走一波-个人赛五
    Walking Between Houses(贪心+思维)
  • 原文地址:https://www.cnblogs.com/gdut-gordon/p/13345320.html
Copyright © 2011-2022 走看看