问题描述
如果你在做SLAM相关的工作时利用到PCL和Eigen这两个库,并且在编译和运行时遇到了一些问题,可以参考下面的解决方案。
编译时出错
如果你编译时失败了,首先检查你CmakeLists中的设置,PCL高版本(1.8以上)需要C++14的标准,如果你使用了C++11标准,编译时会失败。
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
运行时出错
如果你成功编译,但在运行时出现如下报错
rgbd_tum: /usr/include/eigen3/Eigen/src/Core/MapBase.h:198:void Eigen::MapBase<Derived, 0>::checkSanity(typename Eigen::internal::enable_if<(Eigen::internal::traits<OtherDerived>::Alignment > 0), void*>::type) const [with T = Eigen::Map<Eigen::Matrix<double, 2, 6, 0, 2, 6>, 32, Eigen::Stride<0, 0> >; Derived = Eigen::Map<Eigen::Matrix<double, 2, 6, 0, 2, 6>, 32, Eigen::Stride<0, 0> >; typename Eigen::internal::enable_if<(Eigen::internal::traits<OtherDerived>::Alignment > 0), void*>::type = void*]: 假设 ‘( ((internal::UIntPtr(m_data) % internal::traits<Derived>::Alignment) == 0) || (cols() * rows() * minInnerStride * sizeof(Scalar)) < internal::traits<Derived>::Alignment ) && "data is not aligned"’ 失败。
已放弃 (核心已转储)
问题在于编译使用了debug模式,设定为release模式即可。可以通过VSCode等设置,也可以在CmakeLists中使用
SET(CMAKE_BUILD_TYPE Release)
在编译完成时注意查看输出信息是否是
[cmake] -- BUILD TYPE:Release