目录
- 前言
- VTK安装与配置
- Qt使用vtk组件
- PCL 的安装
前言
历时五天完成了一个PCL点云显示的小软件,希望能留下自己在Mac上踩过的各种坑以及解决办法,如果有类似的问题,为大家节省时间
VTK安装与配置
【注意事项】
- brew install vtk安装的东西会放在/usr/local/Cellar/vtk下,这个目录会被之后pcl寻找依赖库的时候引用。我在懵懂无知的时候装了很多个VTK,最终导致路径混乱。所以一定要注意,只要装一个VTK就行了,选一种方式,brew install或者cmake源码。
- 如果vtk --with-qt无法执行,才使用我说的安装VTK的方法。如果要用这个方法,之后在配置的过程很可能会缺包,所以最好先brew install vtk,把lib下的所有文件备份下来,缺什么就补什么
我的问题正是brew install --with-qt会报错,cmake PCL也会报错。
在尝试了各种方法后,最终为了解决问题,我从GitHub上下载了VTK的源码,然后用CMake GUI进行编译,把CMake之后的文件装到brew install应该装到的地方,最后用brew link vtk把所有文件链接上(很关键)。具体编译过程不多说,重要的是GUI里的框都要勾选些什么,这是我勾选的东西:
有几点特别要说明的是:
4. VTK_WRAP_PYTHON一定要勾选,不然在之后pcl.io的静态库会找不到Python Wrap
5. Qt要填写自己Qt CMake文件夹所在的地址
6. Backend 选择OpenGL2,不一定非要选择OpenGL(有大神好像可以成功,但是我没有成功,在之后各种找不到OpenGL2的包,这是因为
PCL 1.9.1 引用的vtk的backend是基于OpenGL2
)之后如果报错找不到包或者头文件之类的,只要在引用头文件的时候加上初始化定义即可(对于新版VTK来说这是必须的,详见官网),即:
#include <vtkAutoInit.h>#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
如果再次brew install vtk,系统提示已经安装完成,则这一步算成功。
之后我又遇到了两个情况:
7. Qt找不到库,而明明装好的vtk lib下是有这个库的,这里需要用之前说的brew link vtk;
8. 提示pcl-io找不到库,这是因为brew install的PCL静态库默认寻找-8.1.1.dylib的vtk文件。如果库的命名结尾不是-8.1.1.dylib,这个时候可以利用Mac的批量重命名功能,将所有的软连接文件名字后缀改为-8.1.1.dylib。如果缺少软连接,则可以在终端用命令ln -s (源文件) (软连接文件)生成软连接;
Qt使用vtk组件
这个部分卡的时间最久,我遇到了非常奇怪的问题:Mac下的QVTKWidget异常放大:
[qtcreator的Designer效果图]
[运行出来的样子]
所有的组件都异常放大很多倍,这是因为用了QVTKWidget而不是QVTKOpenGLWidget,解决办法和详细的问题描述参见:
https://stackoverflow.com/questions/54231657/abnormal-size-of-qt-gui-widget-on-macos/54231720?noredirect=1#comment95300033_54231720
PCL 的安装
brew install pcl 即可