![9ea4ff3716970d5d257f016233a14077.png](https://img-blog.csdnimg.cn/img_convert/9ea4ff3716970d5d257f016233a14077.png)
这篇文章总结了python-pcl编译过程中可能遇到的各种坑, 以及可行的解决方案.
python-pcl正常的编译参考github repo的文档strawlab/python-pcl
问题类型1 编译过程中出现 fatal error: vtkObjectBase.h: No such file or directory
这是由于python-pcl本身的bug导致的. python-pcl默认vtk是安装在/usr/lib下, 因此它就把查找vtk的头文件和库文件的路径写死在setup.py里了;
但是, 大多数人在编译pcl(原生c++版本)的时候, 都是按照官网教程, 把vtk安装到/usr/local/lib里(或者其他的某些你自己指定的路径下), 这个时候setup.py找不到vtk就会报上边的这个错误.
解决方法:
修改setup.py, 找到https://github.com/strawlab/python-pcl/blob/1d83d2d7ce9ce2c22ff5855249459bfc22025000/setup.py#L729 这几行 (这里以pcl 1.8为例, 具体改哪个if分支要按照你本机上的pcl版本决定),
假如你的vtk的库文件安装到了/usr/local/lib中, 头文件安装到了/usr/local/include中, 那么就把原来的
elif pcl_version == '-1.8':
# pcl 1.8.0/1?(Ubuntu 18.04)(melodic)
vtk_version = '7.0'
# pcl 1.8.1?
# vtk_version = '8.0'
vtk_include_dir = os.path.join('/usr/include/vtk-' + vtk_version)
vtk_library_dir = os.path.join('/usr/lib')
改成
elif pcl_version == '-1.8':
# pcl 1.8.0/1?(Ubuntu 18.04)(melodic)
vtk_version = '7.0'
# pcl 1.8.1?
# vtk_version = '8.0'
# 改下边这两个路径
vtk_include_dir = os.path.join('/usr/local/include/vtk-' + vtk_version)
vtk_library_dir = os.path.join('/usr/local/lib')
然后重新编译python-pcl即可.
问题类型2 编译过程中出现 cannot find -lvtk XXXXXXXXX
问题表现为, 在编译快结束的链接过程中, 出现以下链接错误并编译失败(注意后边的-7.0可能是8.0或者其他版本号, 取决于你本机环境).
cannot find -lvtkalglib-7.0
canno