感谢PCL-1.8.0-AllInOne VS2013 Win8 X64 安装配置及部分问题解决方法的文章,本文在其基础上稍作调整,希望可以帮到PCL用户和爱好者!(经过测试,新版的PCL缺少一些类,如:sensor_msgs,导致PointCloud2不能用,因此,如果低版本可以满足工作需要就不要用最新版了!!!)
Win7/win10 x64
Visual Studio 2013 (注意:VS2013安装包不区分64位和32位,所用位数都是在平台下自己设置)
我的百度网盘安装包:
PCL-1.8.0-msvc2013-64/32位链接:https://pan.baidu.com/s/1E5e4rTEfab4AVhB0iBvqTA 密码:v7o6
VS2013链接:https://pan.baidu.com/s/1Ewaa2nuTYXNyW0XPMkQihQ 密码:hvas
一.准备工作
首先需要下载PCL-1.8.0-AllInOne安装包文件和相应的pdb文件。
属性表可以不用下载,路径不同的情况下不能直接用,建议跟着教程自己新建属性表
二.安装
双击安装包,安装的时候注意选上“Add PCL to the system PATH for allusers”,这样安装程序会自动在系统环境变量中添加“PCL_ROOT”、“OPENNI2_INCLUDE64”、“OPENNI2_LIB64”、“OPENNI2_REDIST64”四个项。
(注意:若安装结束后提示“路径过长无法添加环境变量”,这并不影响;如果安装结束后没有自动在系统环境变量中增加以上四项,则手动加上即可。添加路径过长可参看解决Windows7 Path环境变量过长的方法和环境变量path的值大于1023的解决办法)
图示皆以我的安装路径为例。
安装过程中会弹出OpenNI的安装程序,将OpenNI的安装路径设置为“PCL_ROOT”下3rdParty\OpenNI2文件夹,例:
C:\Program Files\PCL 1.8.0\3rdParty\OpenNI2
(这里可以选择安装在其他目录,不过会影响到项目配置。注意:rudy的工作电脑和笔记本都是直接安在了默认路径,所以设计OpenNI2的路径请自行修改)
3.pdb安装
安装程序执行完成后将pdb文件包解压(即PCL-1.8.0-AllInOne-msvc2013-win64-pdb.rar),pdb文件拷贝到“PCL_ROOT”下的bin文件夹中,例:
C:\Program Files\PCL 1.8.0\bin
三.环境变量
上面说过了安装程序会自动添加“PCL_ROOT”项到系统环境变量中,此外还要手动添加PCL、Qhull、FLANN、VTK、OpenNI2的bin目录以及%OPENNI2_REDIST64%到PATH中。
例:
我添加的如下(上面截图是原作者的,也可以。我因为sensor_msgs::PointCloud2的原因重装换成了下面的,应该没区别)
C:\Program Files\PCL 1.8.0\bin; C:\Program Files\PCL 1.8.0\3rdParty\Qhull\bin; C:\Program Files\PCL 1.8.0\3rdParty\FLANN\bin; C:\Program Files\PCL 1.8.0\3rdParty\VTK\bin;C:\Program Files\OpenNI2\Tools; C:\Program Files\OpenNI2\Redist
注意:如果安装程序没有自动添加“PCL_ROOT”则需要手动填上,因为如果结合CMake等工具生成工程的话,PCLConfig.cmake文件是通过“PCL_ROOT”来找PCL库的(如下图)。
四.项目配置
注意VS2013中配置管理器(ConfigurationManager)默认活动平台(Active Solution plantform)是win32,如果安装的是x64的PCL,需要将其改成x64,否则编译的时候会出现奇怪的问题。
修改方法如下:(注意,本文重点)
打开“解决方案资源管理器”视图 -> 右键目标项目("PCLTest"为例) -> 选择“属性”,进入程序属性页 -> 点击“配置管理器” -> 下拉“平台”按钮,点击“新建” -> 新建平台“x64”,(原博客错:从此处复制设置选“空”)(切记,不可选择“空”,需要选择“win32”,选择从“win32”复制之后就不用每次配置“环境目录”了。而且,生成的.exe也可以直接在dos命令下运行了),创建新的解决方案平台打钩 -> 完成。
2.新项目属性表的建立与设置
切换到“属性管理器”视图,解决方案资源管理器(Property Manager)与属性管理器(Solution Explorer)在同一个tab布局中,如果没找到的话,按如下方式打开:
菜单栏的“视图”(View) -> 其他窗口(Other Windows) -> 属性管理器(Property Manager)。
在项目PCLTest的“Debug | 64”下右键添加新项目属性表,取名PCLDebug64.props。双击该项目属性表,打开其属性页并进行以下四项操作。
(1)修改左侧“VC++目录”下的“包含目录”。
添加设置如下:
(2)修改左侧“VC++目录”下的“库目录”。
添加设置如下:
(3)点击左侧“连接器” -> 点击“输入” -> 添加相关的“附加依赖项”。
添加配置如下:
pcl_apps_debug.lib
pcl_common_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_io_ply_debug.lib
pcl_io_debug.lib
pcl_kdtree_debug.lib
pcl_keypoints_debug.lib
pcl_ml_debug.lib
pcl_octree_debug.lib
pcl_outofcore_debug.lib
pcl_people_debug.lib
pcl_recognition_debug.lib
pcl_registration_debug.lib
pcl_sample_consensus_debug.lib
pcl_search_debug.lib
pcl_segmentation_debug.lib
pcl_simulation_debug.lib
pcl_stereo_debug.lib
pcl_surface_debug.lib
pcl_tracking_debug.lib
pcl_visualization_debug.lib
libboost_atomic-vc120-mt-gd-1_59.lib
libboost_chrono-vc120-mt-gd-1_59.lib
libboost_container-vc120-mt-gd-1_59.lib
libboost_context-vc120-mt-gd-1_59.lib
libboost_coroutine-vc120-mt-gd-1_59.lib
libboost_date_time-vc120-mt-gd-1_59.lib
libboost_exception-vc120-mt-gd-1_59.lib
libboost_filesystem-vc120-mt-gd-1_59.lib
libboost_graph-vc120-mt-gd-1_59.lib
libboost_iostreams-vc120-mt-gd-1_59.lib
libboost_locale-vc120-mt-gd-1_59.lib
libboost_log-vc120-mt-gd-1_59.lib
libboost_log_setup-vc120-mt-gd-1_59.lib
libboost_math_c99-vc120-mt-gd-1_59.lib
libboost_math_c99f-vc120-mt-gd-1_59.lib
libboost_math_c99l-vc120-mt-gd-1_59.lib
libboost_math_tr1-vc120-mt-gd-1_59.lib
libboost_math_tr1f-vc120-mt-gd-1_59.lib
libboost_math_tr1l-vc120-mt-gd-1_59.lib
libboost_mpi-vc120-mt-gd-1_59.lib
libboost_prg_exec_monitor-vc120-mt-gd-1_59.lib
libboost_program_options-vc120-mt-gd-1_59.lib
libboost_random-vc120-mt-gd-1_59.lib
libboost_regex-vc120-mt-gd-1_59.lib
libboost_serialization-vc120-mt-gd-1_59.lib
libboost_signals-vc120-mt-gd-1_59.lib
libboost_system-vc120-mt-gd-1_59.lib
libboost_test_exec_monitor-vc120-mt-gd-1_59.lib
libboost_thread-vc120-mt-gd-1_59.lib
libboost_timer-vc120-mt-gd-1_59.lib
libboost_unit_test_framework-vc120-mt-gd-1_59.lib
libboost_wave-vc120-mt-gd-1_59.lib
libboost_wserialization-vc120-mt-gd-1_59.lib
flann-gd.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
qhull-gd.lib
qhullcpp-gd.lib
qhullstatic-gd.lib
qhullstatic_r-gd.lib
qhull_p-gd.lib
qhull_r-gd.lib
vtkalglib-7.0-gd.lib
vtkChartsCore-7.0-gd.lib
vtkCommonColor-7.0-gd.lib
vtkCommonComputationalGeometry-7.0-gd.lib
vtkCommonCore-7.0-gd.lib
vtkCommonDataModel-7.0-gd.lib
vtkCommonExecutionModel-7.0-gd.lib
vtkCommonMath-7.0-gd.lib
vtkCommonMisc-7.0-gd.lib
vtkCommonSystem-7.0-gd.lib
vtkCommonTransforms-7.0-gd.lib
vtkDICOMParser-7.0-gd.lib
vtkDomainsChemistry-7.0-gd.lib
vtkDomainsChemistryOpenGL2-7.0-gd.lib
vtkexoIIc-7.0-gd.lib
vtkexpat-7.0-gd.lib
vtkFiltersAMR-7.0-gd.lib
vtkFiltersCore-7.0-gd.lib
vtkFiltersExtraction-7.0-gd.lib
vtkFiltersFlowPaths-7.0-gd.lib
vtkFiltersGeneral-7.0-gd.lib
vtkFiltersGeneric-7.0-gd.lib
vtkFiltersGeometry-7.0-gd.lib
vtkFiltersHybrid-7.0-gd.lib
vtkFiltersHyperTree-7.0-gd.lib
vtkFiltersImaging-7.0-gd.lib
vtkFiltersModeling-7.0-gd.lib
vtkFiltersParallel-7.0-gd.lib
vtkFiltersParallelImaging-7.0-gd.lib
vtkFiltersProgrammable-7.0-gd.lib
vtkFiltersSelection-7.0-gd.lib
vtkFiltersSMP-7.0-gd.lib
vtkFiltersSources-7.0-gd.lib
vtkFiltersStatistics-7.0-gd.lib
vtkFiltersTexture-7.0-gd.lib
vtkFiltersVerdict-7.0-gd.lib
vtkfreetype-7.0-gd.lib
vtkGeovisCore-7.0-gd.lib
vtkglew-7.0-gd.lib
vtkGUISupportQt-7.0-gd.lib
vtkGUISupportQtSQL-7.0-gd.lib
vtkhdf5-7.0-gd.lib
vtkhdf5_hl-7.0-gd.lib
vtkImagingColor-7.0-gd.lib
vtkImagingCore-7.0-gd.lib
vtkImagingFourier-7.0-gd.lib
vtkImagingGeneral-7.0-gd.lib
vtkImagingHybrid-7.0-gd.lib
vtkImagingMath-7.0-gd.lib
vtkImagingMorphological-7.0-gd.lib
vtkImagingSources-7.0-gd.lib
vtkImagingStatistics-7.0-gd.lib
vtkImagingStencil-7.0-gd.lib
vtkInfovisCore-7.0-gd.lib
vtkInfovisLayout-7.0-gd.lib
vtkInteractionImage-7.0-gd.lib
vtkInteractionStyle-7.0-gd.lib
vtkInteractionWidgets-7.0-gd.lib
vtkIOAMR-7.0-gd.lib
vtkIOCore-7.0-gd.lib
vtkIOEnSight-7.0-gd.lib
vtkIOExodus-7.0-gd.lib
vtkIOExport-7.0-gd.lib
vtkIOGeometry-7.0-gd.lib
vtkIOImage-7.0-gd.lib
vtkIOImport-7.0-gd.lib
vtkIOInfovis-7.0-gd.lib
vtkIOLegacy-7.0-gd.lib
vtkIOLSDyna-7.0-gd.lib
vtkIOMINC-7.0-gd.lib
vtkIOMovie-7.0-gd.lib
vtkIONetCDF-7.0-gd.lib
vtkIOParallel-7.0-gd.lib
vtkIOParallelXML-7.0-gd.lib
vtkIOPLY-7.0-gd.lib
vtkIOSQL-7.0-gd.lib
vtkIOVideo-7.0-gd.lib
vtkIOXML-7.0-gd.lib
vtkIOXMLParser-7.0-gd.lib
vtkjpeg-7.0-gd.lib
vtkjsoncpp-7.0-gd.lib
vtklibxml2-7.0-gd.lib
vtkmetaio-7.0-gd.lib
vtkNetCDF-7.0-gd.lib
vtkNetCDF_cxx-7.0-gd.lib
vtkoggtheora-7.0-gd.lib
vtkParallelCore-7.0-gd.lib
vtkpng-7.0-gd.lib
vtkproj4-7.0-gd.lib
vtkRenderingAnnotation-7.0-gd.lib
vtkRenderingContext2D-7.0-gd.lib
vtkRenderingContextOpenGL2-7.0-gd.lib
vtkRenderingCore-7.0-gd.lib
vtkRenderingFreeType-7.0-gd.lib
vtkRenderingImage-7.0-gd.lib
vtkRenderingLabel-7.0-gd.lib
vtkRenderingLOD-7.0-gd.lib
vtkRenderingOpenGL2-7.0-gd.lib
vtkRenderingQt-7.0-gd.lib
vtkRenderingVolume-7.0-gd.lib
vtkRenderingVolumeOpenGL2-7.0-gd.lib
vtksqlite-7.0-gd.lib
vtksys-7.0-gd.lib
vtktiff-7.0-gd.lib
vtkverdict-7.0-gd.lib
vtkViewsContext2D-7.0-gd.lib
vtkViewsCore-7.0-gd.lib
vtkViewsInfovis-7.0-gd.lib
vtkViewsQt-7.0-gd.lib
vtkzlib-7.0-gd.lib
(4)点击左侧“C/C++” -> 点击“预处理器” -> 添加相关的“预处理器定义”。
添加设置为:(个人以为可以不用设置,但我第一次新建属性表的时候设置了也就没改)
_SCL_SECURE_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS
_SCL_SECURE_NO_WARNINGS _CRT_SECURE_NO_WARNINGS
对该新建立的“项目属性表”进行以上四步操作后,可以把这个属性文件保存出来,每次用的时候在新建项目里导入就可以了。
五、测试代码
我用的是PCL1.7.2以后的新版本中才有的regiongrowing函数,为了方便大家运行,我打包上传了,大家可以直接点击.sln打开工程运行。详见:https://download.csdn.net/download/liukunrs/10463584
六、环境变量path的值大于1023的解决办法
1.计算机—>属性—>更改设置—>高级—>环境变量
2.然后编辑Path,全选将其中的路径全部复制出来。新建一个系统变量取名path2,将复制的内容放入其中。
3.然后再Path中建立一个引用。也就是引用path1的路径。
方法:在path中开头或者结尾中放入%path1% 注意前后加;就行
例如:把”%PCL_ROOT%\bin;%PCL_ROOT%\3rdParty\Qhull\bin;%PCL_ROOT%\3rdParty\FLANN\bin;%PCL_ROOT%\3rdParty\VTK\bin;%PCL_ROOT%\3rdParty\OpenNI2\Tools;%OPENNI2_REDIST64%”剪切出来,放到新建的Path1中,而原Path中在最后加上“%Path1%”
七、遇到的问题:
1、如果头文件中包含了
#include <pcl/sample_consensus/model_types.h>
那么会出现pcl::SAC_SAMPLE_SIZE的报错,可查看我CSDN博客解决:https://blog.csdn.net/liukunrs/article/details/80361134