1.dense_mapping.cpp
运行可执行程序时出现segmention fault段错误
解决方法:
将update函数类型由bool改成void(原函数段没有写返回值)
2.pointcloud_mapping.cpp
(c++11标准)编译执行make命令后报一系列错误:
/usr/include/pcl-1.12/pcl/common/point_tests.h:124:38: error: ‘pcl::traits::HasNoXYZ’ has not been declared
124 | template <typename PointT, traits::HasNoXYZ<PointT> = true> constexpr inline bool
| ^~~~~~~~
/usr/include/pcl-1.12/pcl/common/point_tests.h:124:46: error: expected ‘>’ before ‘<’ token
124 | template <typename PointT, traits::HasNoXYZ<PointT> = true> constexpr inline bool
...In file included from /usr/include/c++/11/algorithm:62,
from /usr/local/include/opencv4/opencv2/core/base.hpp:55,
from /usr/local/include/opencv4/opencv2/core.hpp:53,
from /usr/local/include/opencv4/opencv2/core/core.hpp:48,
from /home/jadrian/fslambook2/ch12/dense_RGBD/pointcloud_mapping.cpp:6:
/usr/include/c++/11/bits/stl_algo.h: In instantiation of ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = __gnu_cxx::__normal_iterator<const pcl::Vertices*, std::vector<pcl::Vertices> >; _OIter = std::back_insert_iterator<std::vector<pcl::Vertices> >; _UnaryOperation = pcl::PolygonMesh::concatenate(pcl::PolygonMesh&, const pcl::PolygonMesh&)::<lambda(int)>]’:
/usr/include/pcl-1.12/pcl/PolygonMesh.h:42:21: required from here
/usr/include/c++/11/bits/stl_algo.h:4296:31: error: no match for call to ‘(pcl::PolygonMesh::concatenate(pcl::PolygonMesh&, const pcl::PolygonMesh&)::<lambda(int)>) (const pcl::Vertices&)’
4296 | *__result = __unary_op(*__first);
| ~~~~~~~~~~^~~~~~~~~~...
make[2]: *** [dense_RGBD/CMakeFiles/surfel_mapping.dir/build.make:76:dense_RGBD/CMakeFiles/surfel_mapping.dir/surfel_mapping.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:198:dense_RGBD/CMakeFiles/surfel_mapping.dir/all] 错误 2
make: *** [Makefile:91:all] 错误 2
原因:
PCL1.9以上版本使用的是c++14标准
解决办法:
在dense_RGBD下的cmakelist文件中,将:
set(CMAKE_CXX_FLAGS "-std=c++11 -O2")
改为:
set(CMAKE_CXX_FLAGS "-std=c++14 -O2")3.
3.surfel_mapping.cpp
编译过程报错:(成员函数setPolynomialOrder)
error: ‘class pcl::MovingLeastSquares<pcl::PointXYZRGB, pcl::PointXYZRGBNormal>’ has no member named ‘setPolynomialFit’; did you mean ‘setPolynomialOrder’?
31 | mls.setPolynomialFit(polynomial_order > 1);
| ^~~~~~~~~~~~~~~~
| setPolynomialOrder
解决办法:
根据提示,将对应对应函数名更改。