从源码编译安装PCL并运行第一个小例子
如何通过源码编译方式安装PCL
对于很多想学习PCL的同学而言,往往会被如何安装困扰很长时间。我就是这其中的一员,为了不让大家在安装问题上浪费太多时间,我决心写下这篇小小的随笔,希望对大家有所帮助。
下载需要的软件包
- Visual Studio [我用的是VS2012,所以这里以这个版本作为基础进行介绍]
- cmake-3.1.0(二进制安装包)
- PCL-1.8.0(源码)
- vtk-6.2.0(源码)
- boost-1.58.0(源码)
- eigen-3.2.5(源码)
- flann-1.8.4(源码)
- qhull-2012.1(源码)
- openni2(OpenNI-Windows-x64-2.2.msi二进制安装包)
请不要问我,这些软件从哪里下载。请到相应的官网去下载吧,利用google,很好找的。这里只是列出了必须安装的一些组件,如果你使用PCL进行开发涉及到了诸如cuda等组件,请自行下载,并参照后面的步骤进行安装。
软件的编译与安装
在开始介绍如何安装之前,我先向大家介绍一下我在配置安装时的目录结构:
在D:\pcl\目录下存放所有的源代码文件;在D:\programs\pcl_suites\下存放所有的编译好的项目文件和最终构建的类库文件[编译好的文件放在xxx-x.y.z文件夹(如flann-1.8.4)下;构建的类库文件放在xxx-install文件夹(如flann-install)下]
- VS和cmake的安装
无限下一步即可,VS2010、VS2012、VS2013均可,而cmake版本要大于2.8.6,此处不再赘述。
- openni2的安装
同样是无限下一步即可,请注意自定义安装目录
- vtk、eigen、flann、qhull的编译
使用cmake-gui,将源代码目录和编译结果的存放目录天道指定位置,运行Configure,将不必要的编译选项去除,如果没有错误的话,点击Generate即完成编译。
- vtk、eigen、flann、qhull的安装
双击x.sln解决方案文件,即可打开由cmake生成的VS工程文件,对ALL_BUILD进行“生成解决方案操作”。当全部生成后,对INSTALL进行“生成解决方案操作”即可完成安装。
- boost的编译
打开VS开发者命令提示符窗口,切换到boost源码的根目录下,在命令行执行.\boostrap.bat命令即可完成编译。
- boost的安装
在VS开发者命令提示符窗口,切换到boost源码的根目录,在命令行执行,\b2 install --prefix=D:\programs\pcl_suites\boost-install\即可完成安装。
PCL的编译
使用cmake-gui,将源代码目录和编译结果的存放目录填入指定位置,点击Configure。选中cmake的Advanced和Grouped选项,对显示有“xxx-NOTFOUND”的项目根据组件的存放位置进行设定。其中boost、flann、vtk、eigen为必须配置的选项,否则会报错。配置没错误后,点击Generate即可完成编译。
tips:由于eigen3x版本变化较大,因此需要手动将源代码中的FindEigen3.cmake文件放在cmake的D:\programs\cmake\share\cmake-3.1\Modules目录下,否则会报错。
- PCL的安装
使用VS打开cmake生成的PCL.sln,对ALL_BUILD进行生成解决方案操作,该过程比较长(我的机器大概跑了将近一个小时),请耐心等待。而后,对INSTALL进行生成解决方案操作,即可完成安装。
- VS和cmake的安装
运行第一个小例子
这里使用到的例子是pcl官网上的passthrough的滤波实例,大家可以去 http://pointclouds.org/documentation/tutorials/passthrough.php#passthrough 下载。
在VS中进行编译运行时,有如下几个注意事项:
- 在项目属性->配置属性->VC++目录中,对包含目录和库目录进行配置。包含目录要添加pcl、boost、eigen的include路径;库目录要添加pcl的lib路径
- 在项目属性->配置属性->C/C++->命令行中,添加-D_SCL_SECURE_NO_WARNINGS选项。
- 在项目属性->配置属性->链接器->输入->附加依赖项中将pcl安装后产生的所有.lib文件的路径添加至此。
- 在项目的Debug目录下放置所有pcl安装后产生的dll文件。
希望大家能快速装好PCL,在图像处理领域勇攀高峰!加油^_^
最新文章
- Cordova - 使用Cordova开发iOS应用实战3(添加Cordova控制台插件)
- CSS基本知识0-命名规范
- C#:实现快捷键自定义设置(转)
- RobotFrameWork WebService Soap接口测试 (一)
- POJ 1836 Alignment 最长递增子序列(LIS)的变形
- Unrecognized Windows Sockets error: 0: JVM_Bind
- python3.x随手笔记1
- 时区之痒 - 从手机GPS模块获取的时间,真的是北京时间么?
- jquery live hover事件的替代写法
- 徐汉彬:亿级Web系统搭建—单机到分布式集群
- android_定义多个Activity及跳转
- 关于API,前后端分离
- Mybatis源码分析--关联表查询及延迟加载(一)
- js获取元素宽高、位置相关知识汇总
- 获取json串里的某个属性值
- MyBatis模糊查询不报错但查不出数据的一种解决方案
- css中根据不同分辨率设置不同样式
- .gitignore文件规则不起效的解决办法
- 浅谈Java——泛型DAO
- python之打包、发布模块
热门文章
- 【6.18校内test】T1多项式输出
- [BJWC2008] Gate Of Babylon
- python之入门
- linux下mysql的常用命令
- win7系统下MongoDB 4.0.1的安装
- element-ui 中 switch 开关绑定number 的解决方法
- 简单告诉你-";border:0";与";border:none";的区别
- javascript 与node的 event-loop
- java 返回输入中出现次数最多的字符串
- 聚类算法博客 K-means算法