vs2019配置PCL1-8-1(windows)

一、下载和安装PCL

1.下载

需要下载AllInOne 和pdb两个包。

我下载的PCL-1.8.1版本,即选择PCL-1.8.1-AllInOne-msvc2017-win64.exepcl-1.8.1-pdb-msvc2017-win64.zip两个文件。

2.安装

1.双击下载的 PCL-1.8.1-AllInOne-msvc2017-win64.exe 文件进行安装。

注意以下几步的选择:

我在安装这类库相关的软件的时候都会尽量避免在路径中带有空格,因为有些软件在检查路径的时候可能会由于空格引发各种问题。因此我把默认的路径中的空格换成了下划线_。当然,Windows默认的Program Files目录无视这条规则,毕竟微软自己设置的目录名不会出现路径的问题。因此,我这里设置的路径是C:\Program Files\PCL_1_8_1。

这里需要配置需要安装的其他库,如果自己不确定到底有没有其他的软件安装过相关的库,那么就全部都勾选了,否则由于库的缺失,点云库就不能正常工作。

【注意】第三方库中有个OpenNI,看一下自己有没有装过,如果装过可以先卸载,不能卸载的在下面的配置路径中要多加注意。

pcl-install-1

接下来点击安装。

一段时间之后,会弹出来一个OpenNI2的安装窗口。把OpenNI2安装在3rdParty文件夹里,即C:\Program Files\PCL_1_8_1\3rdParty\OpenNI2。当然,也可以自己设置路径,一定要记住路径,因为下面的配置要用到。

OpenNI2安装结束之后就完成了点云库的完整安装,安装目录文件夹、3rdparty文件夹、OpenNI2文件夹的样子如下图:

可以看到,我把所有的第三方库全部安装到了3rdparty文件夹中

 最后,将pdb包解压,将解压后的文件拷贝到C:\Program Files\PCL_1_8_1\bin,也就是主目录下的bin中。

 二、环境配置

右键点击此电脑,选择属性,接着点击左侧的高级系统设置,然后选择高级选项卡,点击下面的环境变量...按钮,此时便打开了环境变量的配置窗口。

此时,我们可以看到PCL的根目录以及OpenNI2的目录已经添加到了系统变量中。

pcl-system-var-pcl-root

然后,我们双击系统变量中的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

重启电脑来应用环境变量。

三、Visual Studio开发环境配置

1、首先在VS2019新建空项目,然后在源文件中创建源文件

需要将运行模式改为Debug x64 

å¨è¿éæå¥å¾çæè¿°

2、选择项目,右键选择属性,其配置也要改为Debug x64

å¨è¿éæå¥å¾çæè¿° 3、点击VC++目录中,选择包含目录,进行编辑

然后添加如下路径(添加自己的路径)

C:\Program Files\PCL_1_8_1\3rdParty\VTK\include\vtk-8.0

C:\Program Files\PCL_1_8_1\include\pcl-1.8

C:\Program Files\PCL_1_8_1\3rdParty\Eigen\eigen3

C:\Program Files\PCL_1_8_1\3rdParty\Boost\include\boost-1_64

C:\Program Files\PCL_1_8_1\3rdParty\FLANN\include

C:\Program Files\PCL_1_8_1\3rdParty\Qhull\include

C:\Program Files\PCL_1_8_1\3rdParty\OpenNI2\Include 

 4、点击VC++目录中,选择库目录,进行编辑

然后添加如下路径(添加自己的路径)

C:\Program Files\PCL_1_8_1\3rdParty\OpenNI2\Lib

C:\Program Files\PCL_1_8_1\3rdParty\Qhull\lib

C:\Program Files\PCL_1_8_1\3rdParty\FLANN\lib

C:\Program Files\PCL_1_8_1\3rdParty\Boost\lib

C:\Program Files\PCL_1_8_1\lib

C:\Program Files\PCL_1_8_1\3rdParty\VTK\lib

5、点击C/C++,选择常规,然后将SDL检查改为否

å¨è¿éæå¥å¾çæè¿°

6、将pcl和vtk的lib库加入链接器,点击链接器,选择输入,点击附加依赖项,进行编辑,Debug和Release版本不一致

å¨è¿éæå¥å¾çæè¿° 将以下内容添加到附加依赖项中:

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_s-gd.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

 7、点击C/C++,选择预处理器,将配置改为所有配置,然后点击预处理器定义,进行编辑,添加如下命令

_CRT_SECURE_NO_WARNINGS
BOOST_ALL_NO_LIB
BOOST_USE_WINDOWS_H
NOMINMAX
_SCL_SECURE_NO_WARNINGS
_SILENCE_FPOS_SEEKPOS_DEPRECATION_WARNING

确定,配置完成!

四、问题汇总

在运行点云文件时报错汇总

1.错误C3861“pop_t”: 找不到标识符

修改 dish.h 文件,将typedef unsigned long long pop_t; 移动到 #if __GNUC__ 之前

 如果因为权限无法修改,找到文件所在位置:C:\Program Files\PCL_1_8_1\3rdParty\FLANN\include\flann\algorithms   ,将 dish.h 文件移到桌面,将其修改,然后保存,在移回原位。

2.错误LNK1104无法打开文件“vtkChartsCore-8.2-gd.lib”

å¨è¿éæå¥å¾çæè¿°

是因为在这一步添加依赖项时,添加错了路径,要对应PCL 的版本来添加。

3.出现如下vtkCommonCore-8.0-gd.lib的error时

1>vtkCommonCore-8.0-gd.lib(vtkDebugLeaks.obj) : error LNK2019: 无法解析的外部符号 __imp_MessageBoxA,该符号在函数 “protected: static int __cdecl vtkDebugLeaks::DisplayMessageBox(char const *)” (?DisplayMessageBox@vtkDebugLeaks@@KAHPEBD@Z) 中被引用
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2001: 无法解析的外部符号 __imp_MessageBoxA
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2019: 无法解析的外部符号 __imp_GetStockObject,该符号在函数 “protected: static int __cdecl vtkWin32OutputWindow::Initialize(void)” (?Initialize@vtkWin32OutputWindow@@KAHXZ) 中被引用
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2019: 无法解析的外部符号 __imp_SendMessageA,该符号在函数 “protected: static void __cdecl vtkWin32OutputWindow::AddText(char const *)” (?AddText@vtkWin32OutputWindow@@KAXPEBD@Z) 中被引用
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2019: 无法解析的外部符号 __imp_DefWindowProcA,该符号在函数 "__int64 cdecl vtkWin32OutputWindowWndProc(struct HWND *,unsigned int,unsigned __int64,int64)" (?vtkWin32OutputWindowWndProc@@YA_JPEAUHWND@@I_K_J@Z) 中被引用
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2019: 无法解析的外部符号 __imp_RegisterClassA,该符号在函数 “protected: static int __cdecl vtkWin32OutputWindow::Initialize(void)” (?Initialize@vtkWin32OutputWindow@@KAHXZ) 中被引用
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2019: 无法解析的外部符号 __imp_GetClassInfoA,该符号在函数 “protected: static int __cdecl vtkWin32OutputWindow::Initialize(void)” (?Initialize@vtkWin32OutputWindow@@KAHXZ) 中被引用
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2019: 无法解析的外部符号 __imp_CreateWindowExA,该符号在函数 “protected: static int __cdecl vtkWin32OutputWindow::Initialize(void)” (?Initialize@vtkWin32OutputWindow@@KAHXZ) 中被引用
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2019: 无法解析的外部符号 __imp_ShowWindow,该符号在函数 “protected: static int __cdecl vtkWin32OutputWindow::Initialize(void)” (?Initialize@vtkWin32OutputWindow@@KAHXZ) 中被引用
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2019: 无法解析的外部符号 __imp_MoveWindow,该符号在函数 "__int64 cdecl vtkWin32OutputWindowWndProc(struct HWND *,unsigned int,unsigned __int64,int64)" (?vtkWin32OutputWindowWndProc@@YA_JPEAUHWND@@I_K_J@Z) 中被引用
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2019: 无法解析的外部符号 __imp_LoadCursorA,该符号在函数 “protected: static int __cdecl vtkWin32OutputWindow::Initialize(void)” (?Initialize@vtkWin32OutputWindow@@KAHXZ) 中被引用
1>vtkCommonCore-8.0-gd.lib(vtkWin32OutputWindow.obj) : error LNK2019: 无法解析的外部符号 __imp_LoadIconA,该符号在函数 “protected: static int __cdecl vtkWin32OutputWindow::Initialize(void)” (?Initialize@vtkWin32OutputWindow@@KAHXZ) 中被引用
若出现上面一系列问题,其实就是vtkCommonCore-8.0-gd.lib这一个库的问题,

解决方法是在你的项目属性-连接器–输入–附加依赖项中添加如下两个东西
gdi32.lib
User32.lib
重新生成显示成功运行
 

  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值