我正在使用 Windows 版本 1.12.1 中的预编译/一体式 PCL (PointCloudLibrary)。
这样,我就可以使用可视化工具了,所以库的部分功能已经可以正常工作了。
当我想创建一个 RangeImage 对象时,我的程序要么陷入无限循环,不再执行任何操作,要么在某些情况下被 cpp 标准库的“abort()”函数终止。
创建此问题的最小示例如下所示:
#include <pcl/range_image/range_image.h>
int main () {
pcl::RangeImage rangeImage;
return 0;
}
==== 额外信息: ===============
虽然编译时不会显示错误或警告,但在调试模式 (x64) 下运行应用程序会出现所描述的问题。在释放模式 (x64) 下运行程序会出现来自 std::vector 库的“禁止内存访问”错误。 x86 未测试。
当程序通过 abort() 函数终止时,我在控制台中收到此错误消息:
Assertion failed: (internal::UIntPtr(array) & (31)) == 0 && "this
assertion is explained here: " "http://eigen.tuxfamily.org/dox-
devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE
!!! ****", file C:\Program
Files\Eigen3\include\eigen3\Eigen\src/Core/DenseStorage.h, line 128
我浏览了错误消息推荐的网站,但无法解决问题。我已经将 C++ 标准设置为 c++17。
==============================
有人以前遇到过这个问题并且知道什么可能导致这个问题吗?
感谢您抽出时间。
解决此问题的方法是按照本教程中的说明构建新的 pcl 1.12.1*1(向下滚动直到找到正确的版本):https://gist.github.com/UnaNancyOwen/59319050d53c137ca8f3
此外,在 Visual Studio 中,“C/C++ > 代码生成 > 激活高级指令集”下的项目设置必须设置为 AVX2。
*1) 您无需懂中文即可完成本教程。如果您之前构建过 PCL,您将从中获得所需的所有信息。