PCL1.7.2 VS2013 配置

来源:互联网 发布:c语言中函数的含义 编辑:程序博客网 时间:2024/05/02 12:31

本教程以win8,vs2013环境为例,介绍了PCL1.7.2的安装方法,其它环境也可以参考本教程。PCL安装分为两种方法,第一种,直接从PCL源代码编译,后安装;第二种,使用PCL的All-in-one已经编译好的安装包安装,本文属于第二种方法。

下载并安装PCL

根据VS的版本选择对应版本的PCL下载安装。比如需要在vs2010上安装32位pcl,那么pcl是需要在vs2010上编译的32位版本,再如,在vs2013上安装64位pcl,那么pcl需要在vs2013上编译的64位版本。这个很重要,当然64位的系统可以安装32位的PCL。

安装pcl过程中,有两个是可选的,一个是是否添加pcl到系统里的path,一个是安装路径。第一个默认就好,后面我们会自己添加path,第二个根据自己的喜好选择安装路径,但对于64位版本的pcl不建议安装在Program Files (x86)。

注意:如果以前安装过pcl,想再安装其它版本pcl,可以直接安装上面的版本,只要路径不同就行,然后把vs里pcl的相关配置内容清除,别忘记清楚系统环境变量path里的pcl相关内容。

修改环境变量Path

修改环境变量 path,在其后添加下面内容
;C:\Program Files\PCL1.7.2\bin;C:\Program Files\PCL1.7.2\3rdParty\FLANN\bin;C:\Program Files\PCL1.7.2\3rdParty\VTK\bin;C:\Program Files\PCL1.7.2\3rdParty\Qhull\bin
请不要复制上面的,根据自己的安装路径修改,另外要注意;在英文下输入,同时注意别少加;了。找不到path在哪里设置的自行百度。配置完path后,重启电脑让它生效。

配置VS2013开发环境

这里可以在属性管理器里或解决方案管理器里配置,区别就是,在属性管理器配置的,以后都不需要配置了,在方案管理器配置的仅对该项目有效,后面新建项目需要重新配置,建议使用属性管理器配置。鉴于有些人可能界面设置的不一样,可能找不到属性管理器,只需要点工具,再点导入导出设置,然后选重置所有设置,之后选择C++的开发环境,完成后就可以找到了。最后,建议新手在解决方案管理器里配置。

对于安装64位版本的pcl的,其配置方法不同,第一界面有个运行项,后面有个debug,在后面有个叫解决方案平台的下拉框,其值默认为win32,需要把win32,改成x64,方法是,点win32的箭头,点配置管理器,点活动解决方案平台,点新建,把键入或选择新平台,这一项,切换为x64,然后确定,此时,原来的win32已变为x64,同时,属性管理器里也多出了两项,后缀为x64的,后面配置时在后缀为x64和win32的两项同时按下面方法在属性管理器里配置就行了。安装32位pcl的不需要这一步。

特别提醒:要么在解决方案管理器里配置pcl,要么在属性管理器里配置,别两个地方都配置。

打开VS2013创建一个C++控制台程序,然后对VS进行配置。
1.右键项目属性,点C/C++,再点常规,找到附加包含目录,添加如下

C:\Program Files\PCL1.7.2\include\pcl-1.7C:\Program Files\PCL1.7.2\3rdParty\Boost\include\boost-1_57C:\Program Files\PCL1.7.2\3rdParty\Eigen\eigen3C:\Program Files\PCL1.7.2\3rdParty\FLANN\includeC:\Program Files\PCL1.7.2\3rdParty\QHull\includeC:\Program Files\PCL1.7.2\3rdParty\VTK\include\vtk-6.2

同样,根据自己的安装路径修改。
2.点链接器,再点常规,找到附加库目录,添加如下

C:\Program Files\PCL1.7.2\libC:\Program Files\PCL1.7.2\3rdParty\Boost\libC:\Program Files\PCL1.7.2\3rdParty\FLANN\libC:\Program Files\PCL1.7.2\3rdParty\QHull\libC:\Program Files\PCL1.7.2\3rdParty\VTK\lib

同样,根据自己的安装路径修改。
3.点链接器,再点输入,找到附加依赖项,添加如下

pcl_common_debug.libpcl_features_debug.libpcl_filters_debug.libpcl_io_debug.libpcl_io_ply_debug.libpcl_kdtree_debug.libpcl_keypoints_debug.libpcl_octree_debug.libpcl_outofcore_debug.libpcl_people_debug.libpcl_recognition_debug.libpcl_registration_debug.libpcl_sample_consensus_debug.libpcl_search_debug.libpcl_segmentation_debug.libpcl_surface_debug.libpcl_tracking_debug.libpcl_visualization_debug.liblibboost_atomic-vc120-mt-gd-1_57.liblibboost_chrono-vc120-mt-gd-1_57.liblibboost_container-vc120-mt-gd-1_57.liblibboost_context-vc120-mt-gd-1_57.liblibboost_coroutine-vc120-mt-gd-1_57.liblibboost_date_time-vc120-mt-gd-1_57.liblibboost_exception-vc120-mt-gd-1_57.liblibboost_filesystem-vc120-mt-gd-1_57.liblibboost_graph-vc120-mt-gd-1_57.liblibboost_iostreams-vc120-mt-gd-1_57.liblibboost_locale-vc120-mt-gd-1_57.liblibboost_log-vc120-mt-gd-1_57.liblibboost_log_setup-vc120-mt-gd-1_57.liblibboost_math_c99-vc120-mt-gd-1_57.liblibboost_math_c99f-vc120-mt-gd-1_57.liblibboost_math_c99l-vc120-mt-gd-1_57.liblibboost_math_tr1-vc120-mt-gd-1_57.liblibboost_math_tr1f-vc120-mt-gd-1_57.liblibboost_math_tr1l-vc120-mt-gd-1_57.liblibboost_mpi-vc120-mt-gd-1_57.liblibboost_prg_exec_monitor-vc120-mt-gd-1_57.liblibboost_program_options-vc120-mt-gd-1_57.liblibboost_random-vc120-mt-gd-1_57.liblibboost_regex-vc120-mt-gd-1_57.liblibboost_serialization-vc120-mt-gd-1_57.liblibboost_signals-vc120-mt-gd-1_57.liblibboost_system-vc120-mt-gd-1_57.liblibboost_test_exec_monitor-vc120-mt-gd-1_57.liblibboost_thread-vc120-mt-gd-1_57.liblibboost_timer-vc120-mt-gd-1_57.liblibboost_unit_test_framework-vc120-mt-gd-1_57.liblibboost_wave-vc120-mt-gd-1_57.liblibboost_wserialization-vc120-mt-gd-1_57.libflann_cpp_s-gd.libqhullstatic_d.libvtkalglib-6.2-gd.libvtkChartsCore-6.2-gd.libvtkCommonCore-6.2-gd.libvtkCommonColor-6.2-gd.libvtkCommonComputationalGeometry-6.2-gd.libvtkCommonDataModel-6.2-gd.libvtkCommonExecutionModel-6.2-gd.libvtkCommonMath-6.2-gd.libvtkCommonMisc-6.2-gd.libvtkCommonSystem-6.2-gd.libvtkCommonTransforms-6.2-gd.libvtkDICOMParser-6.2-gd.libvtkDomainsChemistry-6.2-gd.libvtkexoIIc-6.2-gd.libvtkexpat-6.2-gd.libvtkFiltersAMR-6.2-gd.libvtkFiltersCore-6.2-gd.libvtkFiltersExtraction-6.2-gd.libvtkFiltersFlowPaths-6.2-gd.libvtkFiltersGeneral-6.2-gd.libvtkFiltersGeneric-6.2-gd.libvtkFiltersGeometry-6.2-gd.libvtkFiltersHybrid-6.2-gd.libvtkFiltersHyperTree-6.2-gd.libvtkFiltersImaging-6.2-gd.libvtkFiltersModeling-6.2-gd.libvtkFiltersParallel-6.2-gd.libvtkFiltersParallelImaging-6.2-gd.libvtkFiltersProgrammable-6.2-gd.libvtkFiltersSelection-6.2-gd.libvtkFiltersSMP-6.2-gd.libvtkFiltersSources-6.2-gd.libvtkFiltersStatistics-6.2-gd.libvtkFiltersTexture-6.2-gd.libvtkFiltersVerdict-6.2-gd.libvtkfreetype-6.2-gd.libvtkftgl-6.2-gd.libvtkGeovisCore-6.2-gd.libvtkgl2ps-6.2-gd.libvtkhdf5-6.2-gd.libvtkhdf5_hl-6.2-gd.libvtkImagingColor-6.2-gd.libvtkImagingCore-6.2-gd.libvtkImagingFourier-6.2-gd.libvtkImagingGeneral-6.2-gd.libvtkImagingHybrid-6.2-gd.libvtkImagingMath-6.2-gd.libvtkImagingMorphological-6.2-gd.libvtkImagingSources-6.2-gd.libvtkImagingStatistics-6.2-gd.libvtkImagingStencil-6.2-gd.libvtkInfovisCore-6.2-gd.libvtkInfovisLayout-6.2-gd.libvtkInteractionImage-6.2-gd.libvtkInteractionStyle-6.2-gd.libvtkInteractionWidgets-6.2-gd.libvtkIOAMR-6.2-gd.libvtkIOCore-6.2-gd.libvtkIOEnSight-6.2-gd.libvtkIOExodus-6.2-gd.libvtkIOExport-6.2-gd.libvtkIOGeometry-6.2-gd.libvtkIOImage-6.2-gd.libvtkIOImport-6.2-gd.libvtkIOInfovis-6.2-gd.libvtkIOLegacy-6.2-gd.libvtkIOLSDyna-6.2-gd.libvtkIOMINC-6.2-gd.libvtkIOMovie-6.2-gd.libvtkIONetCDF-6.2-gd.libvtkIOParallel-6.2-gd.libvtkIOParallelXML-6.2-gd.libvtkIOPLY-6.2-gd.libvtkIOSQL-6.2-gd.libvtkIOVideo-6.2-gd.libvtkIOXML-6.2-gd.libvtkIOXMLParser-6.2-gd.libvtkjpeg-6.2-gd.libvtkjsoncpp-6.2-gd.libvtklibxml2-6.2-gd.libvtkmetaio-6.2-gd.libvtkNetCDF-6.2-gd.libvtkNetCDF_cxx-6.2-gd.libvtkoggtheora-6.2-gd.libvtkParallelCore-6.2-gd.libvtkpng-6.2-gd.libvtkproj4-6.2-gd.libvtkRenderingAnnotation-6.2-gd.libvtkRenderingContext2D-6.2-gd.libvtkRenderingContextOpenGL-6.2-gd.libvtkRenderingCore-6.2-gd.libvtkRenderingFreeType-6.2-gd.libvtkRenderingFreeTypeOpenGL-6.2-gd.libvtkRenderingGL2PS-6.2-gd.libvtkRenderingImage-6.2-gd.libvtkRenderingLabel-6.2-gd.libvtkRenderingLIC-6.2-gd.libvtkRenderingLOD-6.2-gd.libvtkRenderingOpenGL-6.2-gd.libvtkRenderingVolume-6.2-gd.libvtkRenderingVolumeOpenGL-6.2-gd.libvtksqlite-6.2-gd.libvtksys-6.2-gd.libvtktiff-6.2-gd.libvtkverdict-6.2-gd.libvtkViewsContext2D-6.2-gd.libvtkViewsCore-6.2-gd.libvtkViewsInfovis-6.2-gd.libvtkzlib-6.2-gd.libkernel32.libuser32.libgdi32.libwinspool.libcomdlg32.libadvapi32.libshell32.libole32.liboleaut32.libuuid.libodbc32.libodbccp32.lib

vs版本是2013的可以直接复制到附加依赖项里。注意vs2012,vs2015版的依赖库不一样,不能直接复制上面的,把上面的的复制到记事本里,然后,查看pcl安装路径下boost库的lib文件夹,里面的lib名字里会带有vc***,这个是编译器版本号,例如vs2013版的pcl是上面的vc***是vc120,然后利用记事本的替换功能,把vc120,替换为上面你找到的编译器版本号vc***,再拷贝到附加依赖项里。

安装测试

将下面代码拷贝到vs里,点运行,出现控制台窗口后,提示未找到点云文件,这个可以不管,不报错误,即成功配置pcl。

#include "stdafx.h"#include <pcl/visualization/cloud_viewer.h>#include <iostream>#include <pcl/io/io.h>#include <pcl/io/pcd_io.h>int user_data;voidviewerOneOff (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;}voidviewerPsycho (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);    //FIXME: possible race condition here:    user_data++;}intmain (){    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);    pcl::io::loadPCDFile ("my_point_cloud.pcd", *cloud);    pcl::visualization::CloudViewer viewer("Cloud Viewer");    //blocks until the cloud is actually rendered    viewer.showCloud(cloud);    //use the following functions to get access to the underlying more advanced/powerful    //PCLVisualizer    //This will only get called once    viewer.runOnVisualizationThreadOnce (viewerOneOff);    //This will get called once per visualization iteration    viewer.runOnVisualizationThread (viewerPsycho);    while (!viewer.wasStopped ())    {    //you can also do cool processing here    //FIXME: Note that this is running in a separate thread from viewerPsycho    //and you should guard against race conditions yourself...    user_data++;    }    return 0;}

安装常见错误解决方法
1.提示未找到pcl的头文件等,该问题是附加包含目录里库路径设置不正确导致的,修改或添加相关路径。
2.配置64位pcl出现无法解析的外部符号错误,该错误是解决方案平台未修改导致的,把win32换成x64。
3.有个别人添加了上述路径后发生,还是提示dll找不到的情况,有可能是你在path里少添加相关dll的路径了。还有一个原因是path有长度限制,超出长度的部分就不认了,这时,可以把上面所有bin文件夹下的dll拷贝到‪C:\Windows\System32文件夹里。

0 0