win10 vs2015 PCL1.8.0搭建

2019/3/24 创建文档

1.软件版本

1.1. PCL-1.8.0-AllInOne-msvc2015-win64

PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上运行。如果说OpenCV是2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上具有同等地位,PCL是BSD授权方式,可以免费进行商业和学术应用。

win10 vs2015 PCL1.8.0搭建

1.2 2015.com_chs

……

2. release搭建

2.1 PCL的安装

1.点击PCL-1.8.0-AllInOne-msvc2015-win64.exe一键安装,可以默认也可以自己选择安装路径,如本文所选择的路径为默认安装路径D:\PCL_INSTALL_PATH;
2.在安装过程中,OpenNI2在安装时会弹出界面,为了统一风格,选择目录D:\PCL_INSTALL_PATH
\PCL 1.8.0\3rdParty\OpenNI2,选择其他的目录亦可;
3.等待一段时间,则安装完成。
注意事项:在安装点击“我接收(I)”之后弹出来的对话框中一定要选择第二项AddPCL to the system PATH for all users:(如图)
win10 vs2015 PCL1.8.0搭建

2.2 系统配置步骤

1.点击win10的此电脑->属性->高级系统设置->在系统属性的“高级选项”卡下点击“环境变量”;

2.查看PCL的根目录以及OpenNI2的目录已经添加到了系统变量中
win10 vs2015 PCL1.8.0搭建

3双击系统变量中的Path,再将以下的目录添加到Path中(注意最后一个OpenNI2的路径,要和自己刚刚安装的路径一样才行):

%PCL_ROOT%\bin

%PCL_ROOT%\3rdParty\VTK\bin

%PCL_ROOT%\3rdParty\FLANN\bin

%OPENNI2_REDIST64%

%PCL_ROOT%\3rdParty\Qhull\bin

%PCL_ROOT%\3rdParty\OpenNI2\Tools

4.重启电脑

2.3 VS2015工程配置步骤

1.打开VS2015,创建新的win32控制台工程,建好后将平台改成X64;

2.在属性管理器中双击项目名称进入项目属性页,选择”Release”,”x64”,开始配置Release x64模式的运行属性

win10 vs2015 PCL1.8.0搭建3.进入配置属性→VC++目录编辑“包含目录”,包含目录值具体由安装目录决定
win10 vs2015 PCL1.8.0搭建
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\OpenNI2\Include
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\VTK\include\vtk-7.0
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\Qhull\include
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\FLANN\include
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\Eigen\eigen3
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\Boost\include
D:\PCL_INSTALL_PATH\PCL 1.8.0\include

4.进入配置属性→VC++目录编辑“库目录”,包含目录值具体由安装目录决定
win10 vs2015 PCL1.8.0搭建D:\PCL_INSTALL_PATH\PCL 1.8.0\lib
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\OpenNI2\Include
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\Qhull\lib
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\VTK\lib
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\Boost\lib
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\FLANN\lib

  1. 点击链接器->输入->附加依赖项,点击下拉箭头->编辑,添加下列文件

win10 vs2015 PCL1.8.0搭建
pcl_common_release.lib
pcl_features_release.lib
pcl_filters_release.lib
pcl_io_ply_release.lib
pcl_io_release.lib
pcl_kdtree_release.lib
pcl_keypoints_release.lib
pcl_ml_release.lib
pcl_octree_release.lib
pcl_outofcore_release.lib
pcl_people_release.lib
pcl_recognition_release.lib
pcl_registration_release.lib
pcl_sample_consensus_release.lib
pcl_search_release.lib
pcl_segmentation_release.lib
pcl_stereo_release.lib
pcl_surface_release.lib
pcl_tracking_release.lib
pcl_visualization_release.lib
libboost_atomic-vc140-mt-1_61.lib
libboost_chrono-vc140-mt-1_61.lib
libboost_container-vc140-mt-1_61.lib
libboost_context-vc140-mt-1_61.lib
libboost_coroutine-vc140-mt-1_61.lib
libboost_date_time-vc140-mt-1_61.lib
libboost_exception-vc140-mt-1_61.lib
libboost_filesystem-vc140-mt-1_61.lib
libboost_graph-vc140-mt-1_61.lib
libboost_iostreams-vc140-mt-1_61.lib
libboost_locale-vc140-mt-1_61.lib
libboost_log-vc140-mt-1_61.lib
libboost_log_setup-vc140-mt-1_61.lib
libboost_math_c99-vc140-mt-1_61.lib
libboost_math_c99f-vc140-mt-1_61.lib
libboost_math_c99l-vc140-mt-1_61.lib
libboost_math_tr1-vc140-mt-1_61.lib
libboost_math_tr1f-vc140-mt-1_61.lib
libboost_math_tr1l-vc140-mt-1_61.lib
libboost_mpi-vc140-mt-1_61.lib
libboost_prg_exec_monitor-vc140-mt-1_61.lib
libboost_program_options-vc140-mt-1_61.lib
libboost_random-vc140-mt-1_61.lib
libboost_regex-vc140-mt-1_61.lib
libboost_serialization-vc140-mt-1_61.lib
libboost_signals-vc140-mt-1_61.lib
libboost_system-vc140-mt-1_61.lib
libboost_test_exec_monitor-vc140-mt-1_61.lib
libboost_thread-vc140-mt-1_61.lib
libboost_timer-vc140-mt-1_61.lib
libboost_unit_test_framework-vc140-mt-1_61.lib
libboost_wave-vc140-mt-1_61.lib
libboost_wserialization-vc140-mt-1_61.lib
flann.lib
flann_s.lib
flann-gd.lib
flann_cpp_s.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
qhull.lib
qhull_d.lib
qhullcpp_d.lib
qhullstatic.lib
qhullstatic_d.lib
qhullstatic_r.lib
qhullstatic_r_d.lib
qhull_p.lib
qhull_p_d.lib
qhull_r.lib
qhull_r_d.lib
vtkalglib-7.0.lib
vtkChartsCore-7.0.lib
vtkCommonColor-7.0.lib
vtkCommonComputationalGeometry-7.0.lib
vtkCommonCore-7.0.lib
vtkCommonDataModel-7.0.lib
vtkCommonExecutionModel-7.0.lib
vtkCommonMath-7.0.lib
vtkCommonMisc-7.0.lib
vtkCommonSystem-7.0.lib
vtkCommonTransforms-7.0.lib
vtkDICOMParser-7.0.lib
vtkDomainsChemistry-7.0.lib
vtkexoIIc-7.0.lib
vtkexpat-7.0.lib
vtkFiltersAMR-7.0.lib
vtkFiltersCore-7.0.lib
vtkFiltersExtraction-7.0.lib
vtkFiltersFlowPaths-7.0.lib
vtkFiltersGeneral-7.0.lib
vtkFiltersGeneric-7.0.lib
vtkFiltersGeometry-7.0.lib
vtkFiltersHybrid-7.0.lib
vtkFiltersHyperTree-7.0.lib
vtkFiltersImaging-7.0.lib
vtkFiltersModeling-7.0.lib
vtkFiltersParallel-7.0.lib
vtkFiltersParallelImaging-7.0.lib
vtkFiltersProgrammable-7.0.lib
vtkFiltersSelection-7.0.lib
vtkFiltersSMP-7.0.lib
vtkFiltersSources-7.0.lib
vtkFiltersStatistics-7.0.lib
vtkFiltersTexture-7.0.lib
vtkFiltersVerdict-7.0.lib
vtkfreetype-7.0.lib
vtkGeovisCore-7.0.lib
vtkhdf5-7.0.lib
vtkhdf5_hl-7.0.lib
vtkImagingColor-7.0.lib
vtkImagingCore-7.0.lib
vtkImagingFourier-7.0.lib
vtkImagingGeneral-7.0.lib
vtkImagingHybrid-7.0.lib
vtkImagingMath-7.0.lib
vtkImagingMorphological-7.0.lib
vtkImagingSources-7.0.lib
vtkImagingStatistics-7.0.lib
vtkImagingStencil-7.0.lib
vtkInfovisCore-7.0.lib
vtkInfovisLayout-7.0.lib
vtkInteractionImage-7.0.lib
vtkInteractionStyle-7.0.lib
vtkInteractionWidgets-7.0.lib
vtkIOAMR-7.0.lib
vtkIOCore-7.0.lib
vtkIOEnSight-7.0.lib
vtkIOExodus-7.0.lib
vtkIOExport-7.0.lib
vtkIOGeometry-7.0.lib
vtkIOImage-7.0.lib
vtkIOImport-7.0.lib
vtkIOInfovis-7.0.lib
vtkIOLegacy-7.0.lib
vtkIOLSDyna-7.0.lib
vtkIOMINC-7.0.lib
vtkIOMovie-7.0.lib
vtkIONetCDF-7.0.lib
vtkIOParallel-7.0.lib
vtkIOParallelXML-7.0.lib
vtkIOPLY-7.0.lib
vtkIOSQL-7.0.lib
vtkIOVideo-7.0.lib
vtkIOXML-7.0.lib
vtkIOXMLParser-7.0.lib
vtkjpeg-7.0.lib
vtkjsoncpp-7.0.lib
vtklibxml2-7.0.lib
vtkmetaio-7.0.lib
vtkNetCDF-7.0.lib
vtkNetCDF_cxx-7.0.lib
vtkoggtheora-7.0.lib
vtkParallelCore-7.0.lib
vtkpng-7.0.lib
vtkproj4-7.0.lib
vtkRenderingAnnotation-7.0.lib
vtkRenderingContext2D-7.0.lib
vtkRenderingContextOpenGL-7.0.lib
vtkRenderingCore-7.0.lib
vtkRenderingFreeType-7.0.lib
vtkRenderingImage-7.0.lib
vtkRenderingLabel-7.0.lib
vtkRenderingLOD-7.0.lib
vtkRenderingOpenGL-7.0.lib
vtkRenderingVolume-7.0.lib
vtkRenderingVolumeOpenGL-7.0.lib
vtksqlite-7.0.lib
vtksys-7.0.lib
vtktiff-7.0.lib
vtkverdict-7.0.lib
vtkViewsContext2D-7.0.lib
vtkViewsCore-7.0.lib
vtkViewsInfovis-7.0.lib
vtkzlib-7.0.lib

6.点击配置属性下的调试,右边有个环境项,把值设置为“PATH=(PCLROOT)bin;(PCL_ROOT)bin;(PCL_ROOT)3rdPartyFLANNbin;(PCLROOT)3rdPartyVTKbin;(PCL_ROOT)3rdPartyVTKbin;(PCL_ROOT)Qhullbin;(PCLROOT)3rdPartyOpenNI2Tools;(PCL_ROOT)3rdPartyOpenNI2Tools;(PATH)”

win10 vs2015 PCL1.8.0搭建

7.点击配置属性下的CC++,点击它的子项预处理器,右边有个预处理器定义,添加上_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS
win10 vs2015 PCL1.8.0搭建
8.点击配置属性下的c/c++→常规→附加包含目录,添加:
D:\PCL_INSTALL_PATH\PCL 1.8.0\3rdParty\Boost\include\boost-1_61;
win10 vs2015 PCL1.8.0搭建
此时环境一搭建完成,下附件为测试程序及点云文件:

3 debug搭建

(待补充)

附录:

A visual studio配置项

VS项目中的包含目录、库目录、附加包含目录、附加库目录、附加依赖项均在"项目->属性->配置属性"下进行配置,具体说明如下:

VC++目录:
包含目录:寻找#include<xxxx.h>中的xxxx.h的搜索目录
库目录:寻找.lib文件的搜索目录
C/C++:
常规->附加包含目录:寻找#include<xxxx.h>中的xxxx.h的搜索目录(每一项对应一个文件夹XXXX,文件夹中包含了编译时所需的头文件,使用时直接#include即可)
链接器:
常规->附加库目录:寻找.lib文件的搜索目录
输入->附加依赖项:lib库(C++的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,.cpp,.cc,*.c会被打包成一个.lib文件,这样可以保护源代码)

常见问题:
1.包含目录和附加包含目录(库目录和附加库目录)的区别:
包含目录:修改了系统的include宏的值,是全局的;
附加包含目录:用于当前项目,对其他项目没有影响。
(库目录和附加库目录的区别同上)
2.可知包含目录和附加包含目录(库目录和附加库目录)的区别主要在于全局还是当前,那么当需要对某工程添加这些目录时,通常情况下,都是在附加包含目录和附加库目录中添加的。
3. 要使用一个库,除了要include其头文件以外(附加包含目录),还要在链接过程中把lib加进去(附加库目录、附加依赖项)。
4.添加方法:
附加包含目录—添加工程的头文件目录:
项目->属性->配置属性->C/C+±>常规->附加包含目录:加上头文件的存放目录;
附加库目录—添加文件引用的lib静态库路径:
项目->属性->配置属性->链接器->常规->附加库目录:加上lib文件的存放目录;
附加依赖项—添加工程引用的lib文件名:
项目->属性->配置属性->链接器->输入->附加依赖项:加上lib文件名。
5.当需要向项目中添加.dll动态链接库时,直接将需要添加的.dll文件拖拽到项目生成的.exe所在的文件夹下即可(项目->属性->配置属性->常规->输出目录,可以看到.exe生成在哪个目录下)。
6.在添加上述几个目录的路径的时候,可以看到$(xxxx),这就是宏了,可以点开右下角的宏查看这些分别代表什么字符串。

B visual stadio属性表

之前工程管理大概分成下面三种情况:整个工程是自己写的,基本上自行维护即可;用git相关的管理工具进行管理,团队修改后合并;先分好工,团队成员实现各自模块后进行合并
然而如果一个项目是整个团队做的,而且模块分的比较模糊,基本上每个人都需要在整个工程环境下运行代码,则项目管理会变得无比恶心。因为往往需要拷贝别人的整个工程到自己电脑上然后更改配置才能正常使用。
其中一个解决方法是把所有人电脑配置的可能性都包含在路径中,但这样工程的配置就会显得异常混乱,逼死强迫症!
另外一个是把所用到的东西全部用相对路径包在工程中,这样比较清爽,然而工程包会变得很大。
“主要参考文章:Microsoft Visual Studio 工程属性表props/vsprops创建与使用”

a)创建工程属性表:

  1. 打开菜单栏View(视图)下的Property Manager(属性管理器),此时出现的属性管理器面板属性页;
  2. 展开任意一个工程项目,可以看到内部提供了Debug、Release以及相应的Win32和x64位的版本属性,如果要单独对某一种属性添加属性表,可在其上右键选择“添加新项目属性表”,并设置属性表名称、位置等;
  3. 双击该创建的属性表,便可编辑该属性表的工程设置;可根据需要设置,如输入输出、编译器相关、链接器相关、清单工具、库管理以及事件、自定义生成工具等,此类设置与普通工程的属性配置类似;
  4. 此后,保存该配置的属性表即可。

b)使用工程属性表:

操作类似于创建过程;

  1. 打开菜单栏View(视图)下的Property Manager(属性管理器),此时出现的属性管理器面板属性页;
  2. 展开需要添加属性表的工程项目,并对需要添加属性的Debug、Release以及相应的Win32和x64位的版本属性中,右键添加现有属性表,将之前创建的属性表添加进去即可。

c)重定义自己的工程属性:

在添加了该属性表后,可根据需要修改项目工程属性,如增加、修改、删除等操作(对原添加的属性表无影响),若直接修改添加的属性表也可以,不过若该属性表为其他工程项目共享的(文件位置),则会影响其他工程的属性表配置的,故一般情况下若某工程特殊需要,则只需要修改当前工程属性即可,而不是属性表。