一、问题描述
我使用的pcl版本是pcl1.8.0,而在使用PCL可视化中的PCLVisualizer类时,出现了下面的问题:
因为对于PCL我也是个小白,所以感觉这错的莫名其妙啊。所以我就去网上搜索了一下,网上说是添加下面的这几行代码就可以了。
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
然后我就添加了这几行代码,可是又出现了下面的问题:
严重性 代码 说明 项目 文件 行 禁止显示状态错误 LNK2019 无法解析的外部符号
"void __cdecl vtkRenderingOpenGL_AutoInit_Destruct(void)"
(?vtkRenderingOpenGL_AutoInit_Destruct@@YAXXZ),该符号在函数 "public: __cdecl
vtkRenderingOpenGL_ModuleInit::~vtkRenderingOpenGL_ModuleInit(void)"
(??1vtkRenderingOpenGL_ModuleInit@@QEAA@XZ) 中被引用 cloud_viewer
没有办法只能再去搜索去了,就看到有的博主说可以将下面这行代码修改就可以了。
VTK_MODULE_INIT(vtkRenderingOpenGL);
修改为:
VTK_MODULE_INIT(vtkRenderingOpenGL2);
于是,我就试了一下,倒是真的能运行了,但是又出现了了新的问题。
当我使用鼠标进行点云的缩放时,程序就会突然的崩溃,说是PCL中的一个vtkRenderingOpenGL2-8.0.dll文件在执行时出现了异常,内存访问冲突。
在问题一个接一个的出现之后,终于走到了最后一个问题的面前,不容易啊。
二、问题解决方法
又到网上搜索了一圈之后,我大概能够确定了问题就出在vtkRenderingOpenGL2-8.0.dll这个文件中了,那就没啥好的办法了只能重新编译VTK8.0了。具体的步骤可以看:QT配置PCL过程记录(一)和QT配置PCL过程记录(二)。
不过在重新编译的过程中我们要注意的是下面的这个选项:
这个选项会决定你之后生成的文件时vtkRenderingOpenGL-8.0.dll还是vtkRenderingOpenGL2-8.0.dll,不过这倒也无所谓对后面也没有太大的影响。
通过cmke生成项目之后,按部就班的先生成Debug版本的lib文件,现在就要注意一下,你生成路径中bin文件夹下的dll文件了。
如果你再生成Release版的lib文件,则你的bin文件夹下就会生成相应的Release版的dll文件,它会覆盖你之前的Debug版的dll文件,所以我建议可以先复制Debug版的dll文件做个备份。
注意:一定要根据你的版本来选择Debug版的dll文件或是Release版的dll文件,否则运行还是会失败的。我就是踩了这个坑所以耽误了我很多的时间,难受啊,所以一定要注意这一点。