Windows安装PCL及踩过的坑

1. 软件下载,链接https://github.com/PointCloudLibrary/pcl/releases
2. 按照要求,在安装的时候,注意:

1.双击安装包中的「PCL-1.8.1-AllInOne-msvc2015-win64.exe」程序,安装的时候注意选上Add PCL to the system PATH for all users,,这样安装程序会自动在系统环境变量中添加PCL_ROOT项。
2.安装的过程中会弹出OpenNI的安装程序,将OpenNI的安装路径设置为PCL安装路径下的3rdParty\OpenNI2文件夹。
3.安装程序执行完成后,将pdb文件压缩包解压(即:PCL-1.8.1-AllInOne-msvc2015-win64-pdb.rar),pdb文件拷贝到PCL安装目录下的bin文件夹中。

  • 坑:出现:路径太长错误(path too long installer unable to modify path)弹出警告,不用担心,库已经安装完成,只是环境变量添加失败,需要手动添加。
    解决办法: 手动添加环境变量(推荐),或者使用以下方法:

首先新建环境变量,名称:PCL_ROOT,变量值:D:\Program Files\PCL 1.8.1,然后将以下路径(自己的安装路径)加入path环境变量:D:\Program Files\PCL 1.8.1\bin; D:\Program Files\PCL 1.8.1\3rdParty\FLANN\bin; D:\Program Files\PCL 1.8.1\3rdParty\Qhull\bin; D:\Program Files\PCL 1.8.1\3rdParty\OpenNI2\Tools; D:\Program Files\PCL 1.8.1\3rdParty\VTK\bin

3. VS环境配置

需要设置的地方有三处:

  1. C/C++ -> 常规 -> 附加包含目录(添加头文件目录)
  2. 链接器 -> 常规 -> 附加库目录(添加链接文件目录)
  3. 链接器 -> 输入 -> 附加依赖项
  1. 附加包含目录,其在项目属性“C/C++”子项的“常规”里下,主要用来设置库的头文件路径。这里设置好PCL及第三方库的头文件路径。
D:\Program Files\PCL 1.8.1\include\pcl-1.8
D:\Program Files\PCL 1.8.1\3rdParty\Boost\include\boost-1_59
D:\Program Files\PCL 1.8.1\3rdParty\Eigen\eigen3
D:\Program Files\PCL 1.8.1\3rdParty\FLANN\include
D:\Program Files\PCL 1.8.1\3rdParty\OpenNI2\Include
D:\Program Files\PCL 1.8.1\3rdParty\Qhull\include
D:\Program Files\PCL 1.8.1\3rdParty\VTK\include\vtk-7.0
  1. 附加库目录,其在项目属性的“连接器”子项的“常规”下,主要用来设置库的lib文件路径。这里设置好设置PCL及第三方库的lib文件路径。(比包含目录少了一个Eigen第三方库的)
D:\Program Files\PCL 1.8.1\lib
D:\Program Files\PCL 1.8.1\3rdParty\Boost\lib
D:\Program Files\PCL 1.8.1\3rdParty\FLANN\lib
D:\Program Files\PCL 1.8.1\3rdParty\OpenNI2\lib
D:\Program Files\PCL 1.8.1\3rdParty\Qhull\lib
D:\Program Files\PCL 1.8.1\3rdParty\VTK\lib
  1. 附加依赖项,其在项目属性的“连接器”子项的“输入”下,主要用来设置编译所需的lib。这里设置好设置PCL及第三方库的lib文件名。可以复制,可能出错,下面是我的lib库目录。
pcl_common_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_io_debug.lib
pcl_io_ply_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-vc140-mt-gd-1_64.lib
libboost_bzip2-vc140-mt-gd-1_64.lib
libboost_chrono-vc140-mt-gd-1_64.lib
libboost_container-vc140-mt-gd-1_64.lib
libboost_context-vc140-mt-gd-1_64.lib
libboost_coroutine-vc140-mt-gd-1_64.lib
libboost_date_time-vc140-mt-gd-1_64.lib
libboost_exception-vc140-mt-gd-1_64.lib
libboost_fiber-vc140-mt-gd-1_64.lib
libboost_filesystem-vc140-mt-gd-1_64.lib
libboost_graph-vc140-mt-gd-1_64.lib
libboost_graph_parallel-vc140-mt-gd-1_64.lib
libboost_iostreams-vc140-mt-gd-1_64.lib
libboost_locale-vc140-mt-gd-1_64.lib
libboost_log-vc140-mt-gd-1_64.lib
libboost_log_setup-vc140-mt-gd-1_64.lib
libboost_math_c99-vc140-mt-gd-1_64.lib
libboost_math_c99f-vc140-mt-gd-1_64.lib
libboost_math_c99l-vc140-mt-gd-1_64.lib
libboost_math_tr1-vc140-mt-gd-1_64.lib
libboost_math_tr1f-vc140-mt-gd-1_64.lib
libboost_math_tr1l-vc140-mt-gd-1_64.lib
libboost_mpi-vc140-mt-gd-1_64.lib
libboost_numpy-vc140-mt-gd-1_64.lib
libboost_numpy3-vc140-mt-gd-1_64.lib
libboost_prg_exec_monitor-vc140-mt-gd-1_64.lib
libboost_program_options-vc140-mt-gd-1_64.lib
libboost_python-vc140-mt-gd-1_64.lib
libboost_python3-vc140-mt-gd-1_64.lib
libboost_random-vc140-mt-gd-1_64.lib
libboost_regex-vc140-mt-gd-1_64.lib
libboost_serialization-vc140-mt-gd-1_64.lib
libboost_signals-vc140-mt-gd-1_64.lib
libboost_system-vc140-mt-gd-1_64.lib
libboost_test_exec_monitor-vc140-mt-gd-1_64.lib
libboost_thread-vc140-mt-gd-1_64.lib
libboost_timer-vc140-mt-gd-1_64.lib
libboost_type_erasure-vc140-mt-gd-1_64.lib
libboost_unit_test_framework-vc140-mt-gd-1_64.lib
libboost_wave-vc140-mt-gd-1_64.lib
libboost_wserialization-vc140-mt-gd-1_64.lib
libboost_zlib-vc140-mt-gd-1_64.lib
flann-gd.lib
flann_cpp-gd.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
OpenNI2.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
vtknetcdf_c++-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
  • 坑 : 在后面的测试时,出现fatal error LNK1104: cannot open file 'pcl_apps_debug.lib'或者类似的`LNK1104: cannot open file ‘****.lib’``,这是因为你拷贝的我的,但是你自己却没有等等情况,可以手动删掉刚添加的lib,但治标不治本。解决办法:手动生成自己的lib库目录。利用工具(点我),每个文件夹都寻找一下。
    在这里插入图片描述
    遍历上面的 附加库目录 将所有的lib文件名都找出来(记住每个lib文件有debug版本和release版本,debug程序一般末尾为-gd.lib,或者_debug.lib等,可以根据这个区分debug和release两种模式),拷贝到一个txt文件中,最后拷贝到附加依赖项中。

在这里插入图片描述
在这里插入图片描述

4. 补充

以上就配置完毕了,如果需要配置release模式下的属性表,方法一模一样,只有两点不同

  1. 最初添加属性表时在“release|x64”上右键点击,添加属性表,然后进入配置
  2. Debug与Release在配置属性表的最后一步,也就是设置附加依赖项时填入的lib文件名一样,这一点在配置附加依赖项那里也提到了。(再次提醒,debug版和release版的lib文件名不同)
    在配置好以后,可以右键属性表,将其保存,以后用的时候直接“添加现有属性表”就可以,不用每次使用PCL都重新配置了
5. 测试

在源文件下新建一个cpp文件(如:main.cpp),将下边代码复制进去编译运行,注意设置为对应的程序模式,Debug或者release,如果两种都配置了,那可以随便选,否则选择对应模式。

#include <iostream>
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/console/parse.h>
 
 
int main(int argc, char **argv) {
    std::cout << "Test PCL !!!" << std::endl;
    
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
    uint8_t r(255), g(15), b(15);
    for (float z(-1.0); z <= 1.0; z += 0.05)
    {
      for (float angle(0.0); angle <= 360.0; angle += 5.0)
      {
	pcl::PointXYZRGB point;
	point.x = 0.5 * cosf (pcl::deg2rad(angle));
	point.y = sinf (pcl::deg2rad(angle));
	point.z = z;
	uint32_t rgb = (static_cast<uint32_t>(r) << 16 |
		static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
	point.rgb = *reinterpret_cast<float*>(&rgb);
	point_cloud_ptr->points.push_back (point);
      }
      if (z < 0.0)
      {
	r -= 12;
	g += 12;
      }
      else
      {
	g -= 12;
	b += 12;
      }
    }
    point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
    point_cloud_ptr->height = 1;
    
    pcl::visualization::CloudViewer viewer ("test");
    viewer.showCloud(point_cloud_ptr);
    while (!viewer.wasStopped()){ };
    return 0;
}

出现下图就代表安装成功啦!
在这里插入图片描述

  • 坑(上面已经说过) : 出现fatal error LNK1104: cannot open file 'pcl_apps_debug.lib'或者类似的LNK1104: cannot open file '****.lib',这是因为你拷贝的我的lib,但是你自己却没有等等情况,可以手动删掉刚添加的lib,但治标不治本。解决办法:手动生成自己的lib库目录。利用工具(点我),每个文件夹都寻找一下。
  • 坑:LNK2019无法解析的外部符号 __imp_MessageBoxA******,解决办法,添加预编译头,或者将 User32.lib也加到附加依赖项中。
#pragma comment(lib,"User32.lib")
  • 坑:LNK2019无法解析的外部符号 __imp_GetStockObject******,解决方法:添加预编译头,或者将 gdi32.lib也加到附加依赖项中
#pragma comment(lib, "gdi32.lib")
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在Windows安装PCL(Point Cloud Library),您可以按照以下步骤进行操作: 1. 下载预编译二进制文件:您可以从PCL官方网站(https://pointclouds.org/downloads/)下载预编译的二进制文件。根据您的操作系统和编译器版本选择正确的版本。 2. 解压文件:将下载的二进制文件解压到您选择的目录中。例如,您可以将PCL文件夹解压到C:\Program Files目录下。 3. 配置环境变量:将PCL的bin目录路径添加到系统的环境变量中,以便您可以从任何位置访问PCL命令行工具和文件。打开控制面板并搜索"环境变量",然后在"系统变量"部分找到"Path"变量。编辑该变量并添加PCL的bin目录路径,例如C:\Program Files\PCL 1.10.1\bin。 4. 配置项目:如果您要在Visual Studio中使用PCL开发项目,您需要进行一些额外的配置。打开您的项目属性,然后选择"C/C++"选项卡。在附加包含目录中,添加PCL的include目录路径,例如C:\Program Files\PCL 1.10.1\include。在附加目录中,添加PCL的lib目录路径,例如C:\Program Files\PCL 1.10.1\lib。最后,在链接器选项卡中,在附加依赖项中添加所需的PCL文件,例如pcl_common.lib、pcl_io.lib等。 通过按照上述步骤,您应该能够成功安装和配置PCL。请注意,具体步骤可能因您的操作系统和PCL版本而有所不同。如果遇到任何问题,请参考PCL官方文档或社区论坛以获取更详细的安装指南和支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值