VS2017+PCL1.8.1安装配置

主要参考:win10+vs2017+PCL1.8.1配置过程及注意事项_小小旺仔呀的博客-CSDN博客_vs2017配置pcl

16-PCL教程-基础应用-在win10下安装PCL_哔哩哔哩_bilibili

以上两篇参考非常详细,尤其是B站的这位up主对于每个步骤都解释了为什么这么做,对小白非常友好。本篇只是个人初期具体安装配置的过程记录。

一、前期准备

Visual Studio2017是一直都要用的,很早就安装好了。安装步骤简单,教程随处可见。

下载PCL1.8.1安装包:Point Cloud Library 1.8.1 has been released – Summary?Blog。根据自己vs版本和操作系统位数选择对应的文件(两个)下载到本地。

VS2017+PCL1.8.1安装配置_第1张图片

 二、安装PCL

对PCL-1..8.1-AllInOne,以管理员身份运行。

VS2017+PCL1.8.1安装配置_第2张图片

VS2017+PCL1.8.1安装配置_第3张图片

这里选择中间选项,会自动把PCL添加到系统路径里面

VS2017+PCL1.8.1安装配置_第4张图片

 VS2017+PCL1.8.1安装配置_第5张图片

 VS2017+PCL1.8.1安装配置_第6张图片

 VS2017+PCL1.8.1安装配置_第7张图片

 弹出一个安装OpenNI2的窗口,很多教程建议把路径改到pcl安装目录的3rdparty\openNI2目录下

VS2017+PCL1.8.1安装配置_第8张图片

 VS2017+PCL1.8.1安装配置_第9张图片

 VS2017+PCL1.8.1安装配置_第10张图片

安装完成。解压最开始和安装包一起下载的zip文件,全选里面的文件,复制到pcl安装目录下面的bin文件夹,粘进去,我这里是D:\03-PCL\PCL 1.8.1\bin。

三、配置系统环境变量

直接在搜索框输入‘系统变量’,打开系统属性对话框。

VS2017+PCL1.8.1安装配置_第11张图片

 找到自己的PCL安装目录,有bin文件的都复制一下路径添加到这里面来,总共是这6项。(PCL1.8.1安装的时候勾选了就会自动添加的,无需手动添加)添加完成后,这部分就完成了。重启一下电脑。

VS2017+PCL1.8.1安装配置_第12张图片

 四、在VS中配置

打开VS,新建一个空项目。

VS2017+PCL1.8.1安装配置_第13张图片

新建后默认是x86的环境,我根据自己习惯设置为debug | x64。(后面的环境设置务必与此处保持一致)

VS2017+PCL1.8.1安装配置_第14张图片

 对项目右键单击,选择【属性】,弹出对话框如下。(打开属性页之前先添加一个cpp文件,否则打开的属性页不会有C/C++这项)

VS2017+PCL1.8.1安装配置_第15张图片

 在VC++目录的包含目录库目录里分别添加以下对应项:

!!在包含目录和库目录里面添加路径要一条一条分开添加,不要黏在一起,也不需要分隔符号,否则会报错 ‘无法打开源文件’

包含目录(7个):

D:\03-PCL\PCL 1.8.1\3rdParty\OpenNI2\Include

D:\03-PCL\PCL 1.8.1\include\pcl-1.8

D:\03-PCL\PCL 1.8.1\3rdParty\VTK\include\vtk-8.0

D:\03-PCL\PCL 1.8.1\3rdParty\Qhull\include

D:\03-PCL\PCL 1.8.1\3rdParty\FLANN\include

D:\03-PCL\PCL 1.8.1\3rdParty\Eigen\eigen3

D:\03-PCL\PCL 1.8.1\3rdParty\Boost\include\boost-1_64

(这是按照我的PCL安装目录来的路径。其实只要找到以上路径末端文件的所在位置,将绝对路径粘贴复制即可。添加包含目录是为了能让程序找到PCL提供的各项头文件。)

库目录(6个):

D:\03-PCL\PCL 1.8.1\3rdParty\OpenNI2\Lib

D:\03-PCL\PCL 1.8.1\3rdParty\VTK\lib

D:\03-PCL\PCL 1.8.1\3rdParty\Qhull\lib

D:\03-PCL\PCL 1.8.1\3rdParty\FLANN\lib

D:\03-PCL\PCL 1.8.1\3rdParty\Boost\lib

D:\03-PCL\PCL 1.8.1\lib;

(找到以上路径末端文件的所在位置,将绝对路径粘贴复制即可。添加库目录是为了能让程序找到PCL提供的依赖库。)

VS2017+PCL1.8.1安装配置_第16张图片

添加附加依赖项。因为我环境设置的是debug,找的是debug版本附加依赖项,如下:

vtknetcdf_c++-gd.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_stereo_debug.lib;pcl_surface_debug.lib;pcl_tracking_debug.lib;pcl_visualization_debug.lib;libboost_atomic-vc141-mt-gd-1_64.lib;libboost_bzip2-vc141-mt-gd-1_64.lib;libboost_chrono-vc141-mt-gd-1_64.lib;libboost_container-vc141-mt-gd-1_64.lib;libboost_context-vc141-mt-gd-1_64.lib;libboost_coroutine-vc141-mt-gd-1_64.lib;libboost_date_time-vc141-mt-gd-1_64.lib;libboost_exception-vc141-mt-gd-1_64.lib;libboost_fiber-vc141-mt-gd-1_64.lib;libboost_filesystem-vc141-mt-gd-1_64.lib;libboost_graph-vc141-mt-gd-1_64.lib;libboost_graph_parallel-vc141-mt-gd-1_64.lib;libboost_iostreams-vc141-mt-gd-1_64.lib;libboost_locale-vc141-mt-gd-1_64.lib;libboost_log-vc141-mt-gd-1_64.lib;libboost_log_setup-vc141-mt-gd-1_64.lib;libboost_math_c99-vc141-mt-gd-1_64.lib;libboost_math_c99f-vc141-mt-gd-1_64.lib;libboost_math_c99l-vc141-mt-gd-1_64.lib;libboost_math_tr1-vc141-mt-gd-1_64.lib;libboost_math_tr1f-vc141-mt-gd-1_64.lib;libboost_math_tr1l-vc141-mt-gd-1_64.lib;libboost_mpi-vc141-mt-gd-1_64.lib;libboost_numpy3-vc141-mt-gd-1_64.lib;libboost_numpy-vc141-mt-gd-1_64.lib;libboost_prg_exec_monitor-vc141-mt-gd-1_64.lib;libboost_program_options-vc141-mt-gd-1_64.lib;libboost_python3-vc141-mt-gd-1_64.lib;libboost_python-vc141-mt-gd-1_64.lib;libboost_random-vc141-mt-gd-1_64.lib;libboost_regex-vc141-mt-gd-1_64.lib;libboost_serialization-vc141-mt-gd-1_64.lib;libboost_signals-vc141-mt-gd-1_64.lib;libboost_system-vc141-mt-gd-1_64.lib;libboost_test_exec_monitor-vc141-mt-gd-1_64.lib;libboost_thread-vc141-mt-gd-1_64.lib;libboost_timer-vc141-mt-gd-1_64.lib;libboost_type_erasure-vc141-mt-gd-1_64.lib;libboost_unit_test_framework-vc141-mt-gd-1_64.lib;libboost_wave-vc141-mt-gd-1_64.lib;libboost_wserialization-vc141-mt-gd-1_64.lib;libboost_zlib-vc141-mt-gd-1_64.lib;flann-gd.lib;flann_cpp-gd.lib;flann_cpp_s-gd.lib;flann_sgd.lib;qhull_d.lib;qhullcpp_d.lib;qhullstatic_d.lib;qhullstatic_r_d.lib;qhull_p_d.lib;qhull_r_d.lib;vtkalglib-8.0-gd.lib;vtkChartsCore-8.0-gd.lib;vtkCommonColor-8.0-gd.lib;vtkCommonComputationalGeometry-8.0-gd.lib;vtkCommonCore-8.0-gd.lib;vtkCommonDataModel-8.0-gd.lib;vtkCommonExecutionModel-8.0-gd.lib;vtkCommonMath-8.0-gd.lib;vtkCommonMisc-8.0-gd.lib;vtkCommonSystem-8.0-gd.lib;vtkCommonTransforms-8.0-gd.lib;vtkDICOMParser-8.0-gd.lib;vtkDomainsChemistry-8.0-gd.lib;vtkexoIIc-8.0-gd.lib;vtkexpat-8.0-gd.lib;vtkFiltersAMR-8.0-gd.lib;vtkFiltersCore-8.0-gd.lib;vtkFiltersExtraction-8.0-gd.lib;vtkFiltersFlowPaths-8.0-gd.lib;vtkFiltersGeneral-8.0-gd.lib;vtkFiltersGeneric-8.0-gd.lib;vtkFiltersGeometry-8.0-gd.lib;vtkFiltersHybrid-8.0-gd.lib;vtkFiltersHyperTree-8.0-gd.lib;vtkFiltersImaging-8.0-gd.lib;vtkFiltersModeling-8.0-gd.lib;vtkFiltersParallel-8.0-gd.lib;vtkFiltersParallelImaging-8.0-gd.lib;vtkFiltersPoints-8.0-gd.lib;vtkFiltersProgrammable-8.0-gd.lib;vtkFiltersSelection-8.0-gd.lib;vtkFiltersSMP-8.0-gd.lib;vtkFiltersSources-8.0-gd.lib;vtkFiltersStatistics-8.0-gd.lib;vtkFiltersTexture-8.0-gd.lib;vtkFiltersTopology-8.0-gd.lib;vtkFiltersVerdict-8.0-gd.lib;vtkfreetype-8.0-gd.lib;vtkGeovisCore-8.0-gd.lib;vtkgl2ps-8.0-gd.lib;vtkhdf5-8.0-gd.lib;vtkhdf5_hl-8.0-gd.lib;vtkImagingColor-8.0-gd.lib;vtkImagingCore-8.0-gd.lib;vtkImagingFourier-8.0-gd.lib;vtkImagingGeneral-8.0-gd.lib;vtkImagingHybrid-8.0-gd.lib;vtkImagingMath-8.0-gd.lib;vtkImagingMorphological-8.0-gd.lib;vtkImagingSources-8.0-gd.lib;vtkImagingStatistics-8.0-gd.lib;vtkImagingStencil-8.0-gd.lib;vtkInfovisCore-8.0-gd.lib;vtkInfovisLayout-8.0-gd.lib;vtkInteractionImage-8.0-gd.lib;vtkInteractionStyle-8.0-gd.lib;vtkInteractionWidgets-8.0-gd.lib;vtkIOAMR-8.0-gd.lib;vtkIOCore-8.0-gd.lib;vtkIOEnSight-8.0-gd.lib;vtkIOExodus-8.0-gd.lib;vtkIOExport-8.0-gd.lib;vtkIOExportOpenGL-8.0-gd.lib;vtkIOGeometry-8.0-gd.lib;vtkIOImage-8.0-gd.lib;vtkIOImport-8.0-gd.lib;vtkIOInfovis-8.0-gd.lib;vtkIOLegacy-8.0-gd.lib;vtkIOLSDyna-8.0-gd.lib;vtkIOMINC-8.0-gd.lib;vtkIOMovie-8.0-gd.lib;vtkIONetCDF-8.0-gd.lib;vtkIOParallel-8.0-gd.lib;vtkIOParallelXML-8.0-gd.lib;vtkIOPLY-8.0-gd.lib;vtkIOSQL-8.0-gd.lib;vtkIOTecplotTable-8.0-gd.lib;vtkIOVideo-8.0-gd.lib;vtkIOXML-8.0-gd.lib;vtkIOXMLParser-8.0-gd.lib;vtkjpeg-8.0-gd.lib;vtkjsoncpp-8.0-gd.lib;vtklibharu-8.0-gd.lib;vtklibxml2-8.0-gd.lib;vtklz4-8.0-gd.lib;vtkmetaio-8.0-gd.lib;vtkNetCDF-8.0-gd.lib;vtkoggtheora-8.0-gd.lib;vtkParallelCore-8.0-gd.lib;vtkpng-8.0-gd.lib;vtkproj4-8.0-gd.lib;vtkRenderingAnnotation-8.0-gd.lib;vtkRenderingContext2D-8.0-gd.lib;vtkRenderingContextOpenGL-8.0-gd.lib;vtkRenderingCore-8.0-gd.lib;vtkRenderingFreeType-8.0-gd.lib;vtkRenderingGL2PS-8.0-gd.lib;vtkRenderingImage-8.0-gd.lib;vtkRenderingLabel-8.0-gd.lib;vtkRenderingLIC-8.0-gd.lib;vtkRenderingLOD-8.0-gd.lib;vtkRenderingOpenGL-8.0-gd.lib;vtkRenderingVolume-8.0-gd.lib;vtkRenderingVolumeOpenGL-8.0-gd.lib;vtksqlite-8.0-gd.lib;vtksys-8.0-gd.lib;vtktiff-8.0-gd.lib;vtkverdict-8.0-gd.lib;vtkViewsContext2D-8.0-gd.lib;vtkViewsCore-8.0-gd.lib;vtkViewsInfovis-8.0-gd.lib;vtkzlib-8.0-gd.lib;opengl32.lib

VS2017+PCL1.8.1安装配置_第17张图片

附加依赖项不用一个个粘进去,可以堆在一起添加进去。如果环境设置为release,在网上也能搜得到。到这里配置就完成了。

五、问题

①一个非常常见的问题,错误C4996。这是在找解决方案的时候看到的回答,可以解决问题。

VS2017+PCL1.8.1安装配置_第18张图片

直接把这三句话全部粘进预处理器定义里面。

_CRT_SECURE_NO_WARNINGS

_SCL_SECURE_NO_WARNINGS

_SILENCE_FPOS_SEEKPOS_DEPRECATION_WARNING 

VS2017+PCL1.8.1安装配置_第19张图片

②另一个很常见的问题。(不管遇没遇到,我习惯性配置的时候直接改了,反正很快)

解决方案是:默认是【是】,这里改成【否】

VS2017+PCL1.8.1安装配置_第20张图片

③ (补充)后来运行其他案例的时候,遇到的报错。

VS2017+PCL1.8.1安装配置_第21张图片

 解决方案:在主程序代码的最上面加上这句 #define BOOST_TYPEOF_EMULATION

参考:点云编译错误及解决_JmHm的博客-CSDN博客

④(补充)运行其他案例时遇到的报错,忘记截图,错误提示为:“pop_t:找不到标识符”。

VS2017+PCL1.8.1安装配置_第22张图片

 参见:C3861 “pop_t”:找不到标识符,解决办法_Leo-Ma的博客-CSDN博客_pop_t 找不到标识符

⑤(补充)因为需要,时隔很久之后重新配了一个新项目,结果报错(心脏骤停)。错误为:

无法打开pcl_common_debug.lib;找不到pcl_common_debug.lib(忘记截图了)

 找了一下,这个博主的方法有效,把提示找不到的lib文件,复制一份到当前项目所在文件夹。

由于找不动pcl_common_debug.dll,无法继续执行代码_钢铁男儿的博客-CSDN博客

一开始只粘了提示找不到的lib文件进去,结果又报找不到另一个lib文件的错误。所以干脆直接把所有的lib粘进去了。向下面这样: 

这个文件夹下面的所有lib,我没管是release的还是debug的,一股脑全都复制了。

VS2017+PCL1.8.1安装配置_第23张图片

 复制进我新建的项目所在的文件夹里面,可以正常运行。

VS2017+PCL1.8.1安装配置_第24张图片

⑥(补充)最近再配置又冒出一个错误(没截图)

错误主要内容是:找不到flann_sgd.lib。

 我的附加依赖项一致都是粘贴复制的上面那一大段,以前没报错过,所有出现这种错误还真的意外。就去pcl安装目录下找了一下这个文件,发现有是有,就是名字有点点不一样:

 解决方案就是把附加依赖项里那个flann_sgd.lib,改成flann_s-gd.lib,就可以正常运行了。

 六、测试案例

测试案例的代码是在网上随便搜的。

#include
#include
#include
#include
#include

VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkRenderingOpenGL);

int user_data;
void viewerOneoff(pcl::visualization::PCLVisualizer& viewer) {
    viewer.setBackgroundColor(1.0, 0.5, 1.0);
    pcl::PointXYZ o;
    o.x = 1.0;
    o.y = 0;
    o.z = 0;
    viewer.addSphere(o, 0.25, "sphere", 0);
    std::cout << "i only run once" << std::endl;
}
void viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{
    static unsigned count = 0;
    std::stringstream ss;
    ss << "Once per viewer loop: " << count++;
    viewer.removeShape("text", 0);
    viewer.addText(ss.str(), 200, 300, "text", 0);
    user_data++;
}
int main()
{
    pcl::PointCloud::Ptr cloud(new pcl::PointCloud);
    pcl::io::loadPCDFile("rabbit.pcd", *cloud);//注意替换自己的pcd点云数据
    pcl::visualization::CloudViewer viewer("Cloud Viewer");
    viewer.showCloud(cloud);
    viewer.runOnVisualizationThreadOnce(viewerOneoff);
    viewer.runOnVisualizationThread(viewerPsycho);
    while (!viewer.wasStopped())
    {
        user_data++;
    }
    return 0;
}

测试结果:

VS2017+PCL1.8.1安装配置_第25张图片

 本文的配置为一次性配置,即每一次新建空项目时都需要重复步骤四。

你可能感兴趣的:(PCL点云处理,c++)