WIN10环境下配置PCL1.11.1+Visual Studio2019详细教程

WIN10环境下配置PCL1.11.1+Visual Studio2019详细教程


下载与安装Visual Studio2019

VS2019官网下载地址链接: https://visualstudio.microsoft.com/zh-hans/vs/

下载community2019版本,接下来按照提示安装即可。

官网下载地址
【注】:针对PCL编程时在安装时勾选 ‘使用C++的桌面开发’

针对PCL编程在安装时勾选使用C++的桌面开发
安装完毕后重启电脑。


下载与安装PCL1.11.1

1.下载

采用在GitHub上直接下载的AllInOne文件进行安装。

PCL下载地址链接: https://github.com/PointCloudLibrary/pcl/releases

需要下载如下如图的两个文件。
PCL-1.11.1-AllInOne-msvc2019-win64.exe
pcl-1.11.1-pdb-msvc2019-win64.zip
PCL下载
也可以根据自己的开发需要和 visual studio版本 选择不同的PCL版本进行安装。安装过程大致是相似的。

【注】:下载到的文件名为:PCL-1.11.1-AllInOne-msvc2019-win64.exe

其中msvc2019代表适合VS2019版本进行编译的PCL软件,如果需要在VS2017等版本进行开发则需要下载后缀为msvc2017的PC.exe文件,VS2019环境下安装msvc2017会报错!相反同理。



2.安装(无报错情况下)

Windows上安装软件的常规操作即可安装。

【注】:在这一步需要勾选Add PCL to the system PATH for all users

勾选
PCL安装成功后会自动跳出安装OpenNI的提示,十分建议OpenNI安装到PCL对应的相关文件夹下! 这样后续环境配置会简便许多。

例如:我的PCL安装目录:C:\Program Files\PCL 1.11.1

我的OpenNI安装目录:C:\Program Files\PCL 1.11.1\3rdParty\OpenNI2

openni安装目录

安装完毕后需要将pcl-1.11.1-pdb-msvc2019-win64.zip下的文件全部解压到C:\Program Files\PCL 1.11.1\bin目录下,效果如下如图。

卧槽!BIN!
PCL的安装也就完成了。


3.安装( 提示path too long installer unable to modify path报错的情况下)

如果正常安装时报错了的话,┓( ´∀` )┏ 比较不走运。
在安装PCL的过程中如果系统提示path too long installer unable to modify path错误导致PCL安装提前结束,此时则需要 手动添加PCL环境变量与手动安装OpenNI2


3.1报错后的安装情况

在PCL安装时提示path too long错误,此时电脑中PCL软件是已经安装成功了的。但是PCL在系统中的环境变量没有自动添加 (已经报错了嘛),同时本应自动弹出的OpenNI2安装程序也没有运行(但是OpenNI2的安装包已经有了, 详见 3.3)。
所以我们需要做的就是 手动添加PCL环境变量与手动安装OpenNI2

3.2手动添加环境变量

下面是手动添加PCL环境变量的方法。

依次打开:控制面板——>系统和安全——>系统——>高级系统设置——>环境变量

系统和安全
系统
高级系统设置
环境变量


在环境变量中应该已经出现PCL的根目录变量。

PCL
接下来我们需要添加下面这些到系统变量中。

%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

【注】:添加方法:点击“新建”,然后将上述六行代码分别复制到变量名和变量值中

新建
变量名和变量值
添加好之后的效果应该如下图。

效果


3.3 手动安装OpenNI2

这一步就很简单了,OpenNI2的安装包在目录C:\Program Files\PCL 1.11.1\3rdParty\OpenNI2下,为OpenNI-Windows-x64-2.2.msi

下面的安装步骤就是一路“下一步”就可以了~~
【注】:十分建议OpenNI2安装到PCL对应的相关文件夹下!
即上述.msi安装文件所在的…\PCL 1.11.1\3rdParty\OpenNI2文件夹。


安装完毕后对应的环境变量应该已经生成了OpenNI2的系统变量。

OPENNI
这样手动添加PCL环境变量与手动安装OpenNI2的工作就完成了。
【注】:上述所有环境变量配置完成之后需要将电脑重启一下才能生效!!!


配置VS2019项目

VS2019项目配置应该是最繁琐的一步了……(゚~゚).

1.新建项目

新建
上方解决方案配置选择Debug,解决方案平台选择x64。

在这里插入图片描述
在源文件目录下新建一个C++文件:main.cpp

在这里插入图片描述


2.VS中配置PCL

右键单击 新项目,在最下方找到 属性

属性
设置此处为Debug,解决方案平台选择x64

64系统


找到 配置属性——> VC++目录 ——>包含目录和源目录
将下面的代码分别添加到包含目录源目录中。

$(PCL_ROOT)\include\pcl-1.11;$(PCL_ROOT)\3rdParty\Boost\include\boost-1_74;
$(PCL_ROOT)\3rdParty\Eigen\eigen3;$(PCL_ROOT)\3rdParty\FLANN\include;
$(PCL_ROOT)\3rdParty\Qhull\include;$(PCL_ROOT)\3rdParty\VTK\include\vtk-8.2;
$(PCL_ROOT)\3rdParty\OpenNI2\Include;

【注】:添加方法:点击图标,然后将上述代码复制到框图中

添加完毕后的效果(根目录同理):

效果2
效果1
同理,找到 配置属性——> VC++目录 ——>库目录
将下面的代码添加到库目录中。

$(PCL_ROOT)\lib;
$(PCL_ROOT)\3rdParty\Boost\lib;
$(PCL_ROOT)\3rdParty\FLANN\lib;
$(PCL_ROOT)\3rdParty\Qhull\lib;
$(PCL_ROOT)\3rdParty\VTK\lib;
$(PCL_ROOT)\3rdParty\OpenNI2\Lib;

添加完毕后的效果:

库目录效果
找到 配置属性——> 调试 ——>环境
将下面的代码添加到环境中。

PATH=$(PCL_ROOT)\bin;
$(PCL_ROOT)\3rdParty\FLANN\bin;
$(PCL_ROOT)\3rdParty\VTK\bin;
$(PCL_ROOT)\3rdParty\OpenNI2\Tools

添加完毕后的效果:

环境效果
找到 配置属性——> C/C++ ——> 预处理器 ——> 预处理器定义
将下面的代码添加到预处理器定义中。

//预处理器定义
_SCL_SECURE_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS

添加完毕后的效果:

预处理器


下面是最繁琐的部分,也是变化最多的部分。
找到 配置属性——> 链接器 ——> 输入 ——> 附加依赖项
【注】:下面的代码是为DEBUG模式准备的,Release版模式不适用于下面的代码!

将下面的.lib文件添加到附加依赖项中。
文件有很多,需要检查你的.lib文件和我给出的静态链接库各个文件的 版本是否一致!
例如:...-8.2-...& ..1_74...等。

pcl_commond.lib
pcl_featuresd.lib
pcl_filtersd.lib
pcl_iod.lib
pcl_io_plyd.lib
pcl_kdtreed.lib
pcl_keypointsd.lib
pcl_mld.lib
pcl_octreed.lib
pcl_outofcored.lib
pcl_peopled.lib
pcl_recognitiond.lib
pcl_registrationd.lib
pcl_sample_consensusd.lib
pcl_searchd.lib
pcl_segmentationd.lib
pcl_stereod.lib
pcl_surfaced.lib
pcl_trackingd.lib
pcl_visualizationd.lib
vtkChartsCore-8.2-gd.lib
vtkCommonColor-8.2-gd.lib
vtkCommonComputationalGeometry-8.2-gd.lib
vtkCommonCore-8.2-gd.lib
vtkCommonDataModel-8.2-gd.lib
vtkCommonExecutionModel-8.2-gd.lib
vtkCommonMath-8.2-gd.lib
vtkCommonMisc-8.2-gd.lib
vtkCommonSystem-8.2-gd.lib
vtkCommonTransforms-8.2-gd.lib
vtkDICOMParser-8.2-gd.lib
vtkDomainsChemistry-8.2-gd.lib
vtkDomainsChemistryOpenGL2-8.2-gd.lib
vtkdoubleconversion-8.2-gd.lib
vtkexodusII-8.2-gd.lib
vtkexpat-8.2-gd.lib
vtkFiltersAMR-8.2-gd.lib
vtkFiltersCore-8.2-gd.lib
vtkFiltersExtraction-8.2-gd.lib
vtkFiltersFlowPaths-8.2-gd.lib
vtkFiltersGeneral-8.2-gd.lib
vtkFiltersGeneric-8.2-gd.lib
vtkFiltersGeometry-8.2-gd.lib
vtkFiltersHybrid-8.2-gd.lib
vtkFiltersHyperTree-8.2-gd.lib
vtkFiltersImaging-8.2-gd.lib
vtkFiltersModeling-8.2-gd.lib
vtkFiltersParallel-8.2-gd.lib
vtkFiltersParallelImaging-8.2-gd.lib
vtkFiltersPoints-8.2-gd.lib
vtkFiltersProgrammable-8.2-gd.lib
vtkFiltersSelection-8.2-gd.lib
vtkFiltersSMP-8.2-gd.lib
vtkFiltersSources-8.2-gd.lib
vtkFiltersStatistics-8.2-gd.lib
vtkFiltersTexture-8.2-gd.lib
vtkFiltersTopology-8.2-gd.lib
vtkFiltersVerdict-8.2-gd.lib
vtkfreetype-8.2-gd.lib
vtkGeovisCore-8.2-gd.lib
vtkgl2ps-8.2-gd.lib
vtkglew-8.2-gd.lib
vtkGUISupportMFC-8.2-gd.lib
vtkhdf5-8.2-gd.lib
vtkhdf5_hl-8.2-gd.lib
vtkImagingColor-8.2-gd.lib
vtkImagingCore-8.2-gd.lib
vtkImagingFourier-8.2-gd.lib
vtkImagingGeneral-8.2-gd.lib
vtkImagingHybrid-8.2-gd.lib
vtkImagingMath-8.2-gd.lib
vtkImagingMorphological-8.2-gd.lib
vtkImagingSources-8.2-gd.lib
vtkImagingStatistics-8.2-gd.lib
vtkImagingStencil-8.2-gd.lib
vtkInfovisCore-8.2-gd.lib
vtkInfovisLayout-8.2-gd.lib
vtkInteractionImage-8.2-gd.lib
vtkInteractionStyle-8.2-gd.lib
vtkInteractionWidgets-8.2-gd.lib
vtkIOAMR-8.2-gd.lib
vtkIOAsynchronous-8.2-gd.lib
vtkIOCityGML-8.2-gd.lib
vtkIOCore-8.2-gd.lib
vtkIOEnSight-8.2-gd.lib
vtkIOExodus-8.2-gd.lib
vtkIOExport-8.2-gd.lib
vtkIOExportOpenGL2-8.2-gd.lib
vtkIOExportPDF-8.2-gd.lib
vtkIOGeometry-8.2-gd.lib
vtkIOImage-8.2-gd.lib
vtkIOImport-8.2-gd.lib
vtkIOInfovis-8.2-gd.lib
vtkIOLegacy-8.2-gd.lib
vtkIOLSDyna-8.2-gd.lib
vtkIOMINC-8.2-gd.lib
vtkIOMovie-8.2-gd.lib
vtkIONetCDF-8.2-gd.lib
vtkIOParallel-8.2-gd.lib
vtkIOParallelXML-8.2-gd.lib
vtkIOPLY-8.2-gd.lib
vtkIOSegY-8.2-gd.lib
vtkIOSQL-8.2-gd.lib
vtkIOTecplotTable-8.2-gd.lib
vtkIOVeraOut-8.2-gd.lib
vtkIOVideo-8.2-gd.lib
vtkIOXML-8.2-gd.lib
vtkIOXMLParser-8.2-gd.lib
vtkjpeg-8.2-gd.lib
vtkjsoncpp-8.2-gd.lib
vtklibharu-8.2-gd.lib
vtklibxml2-8.2-gd.lib
vtklz4-8.2-gd.lib
vtklzma-8.2-gd.lib
vtkmetaio-8.2-gd.lib
vtkNetCDF-8.2-gd.lib
vtkogg-8.2-gd.lib
vtkParallelCore-8.2-gd.lib
vtkpng-8.2-gd.lib
vtkproj-8.2-gd.lib
vtkpugixml-8.2-gd.lib
vtkRenderingAnnotation-8.2-gd.lib
vtkRenderingContext2D-8.2-gd.lib
vtkRenderingContextOpenGL2-8.2-gd.lib
vtkRenderingCore-8.2-gd.lib
vtkRenderingExternal-8.2-gd.lib
vtkRenderingFreeType-8.2-gd.lib
vtkRenderingGL2PSOpenGL2-8.2-gd.lib
vtkRenderingImage-8.2-gd.lib
vtkRenderingLabel-8.2-gd.lib
vtkRenderingLOD-8.2-gd.lib
vtkRenderingOpenGL2-8.2-gd.lib
vtkRenderingVolume-8.2-gd.lib
vtkRenderingVolumeOpenGL2-8.2-gd.lib
vtksqlite-8.2-gd.lib
vtksys-8.2-gd.lib
vtktheora-8.2-gd.lib
vtktiff-8.2-gd.lib
vtkverdict-8.2-gd.lib
vtkViewsContext2D-8.2-gd.lib
vtkViewsCore-8.2-gd.lib
vtkViewsInfovis-8.2-gd.lib
vtkzlib-8.2-gd.lib
libboost_atomic-vc142-mt-gd-x64-1_74.lib
libboost_bzip2-vc142-mt-gd-x64-1_74.lib
libboost_chrono-vc142-mt-gd-x64-1_74.lib
libboost_container-vc142-mt-gd-x64-1_74.lib
libboost_context-vc142-mt-gd-x64-1_74.lib
libboost_contract-vc142-mt-gd-x64-1_74.lib
libboost_coroutine-vc142-mt-gd-x64-1_74.lib
libboost_date_time-vc142-mt-gd-x64-1_74.lib
libboost_exception-vc142-mt-gd-x64-1_74.lib
libboost_fiber-vc142-mt-gd-x64-1_74.lib
libboost_filesystem-vc142-mt-gd-x64-1_74.lib
libboost_graph-vc142-mt-gd-x64-1_74.lib
libboost_graph_parallel-vc142-mt-gd-x64-1_74.lib
libboost_iostreams-vc142-mt-gd-x64-1_74.lib
libboost_locale-vc142-mt-gd-x64-1_74.lib
libboost_log-vc142-mt-gd-x64-1_74.lib
libboost_log_setup-vc142-mt-gd-x64-1_74.lib
libboost_math_c99-vc142-mt-gd-x64-1_74.lib
libboost_math_c99f-vc142-mt-gd-x64-1_74.lib
libboost_math_c99l-vc142-mt-gd-x64-1_74.lib
libboost_math_tr1-vc142-mt-gd-x64-1_74.lib
libboost_math_tr1f-vc142-mt-gd-x64-1_74.lib
libboost_math_tr1l-vc142-mt-gd-x64-1_74.lib
libboost_mpi-vc142-mt-gd-x64-1_74.lib
libboost_nowide-vc142-mt-gd-x64-1_74.lib
libboost_numpy38-vc142-mt-gd-x64-1_74.lib
libboost_prg_exec_monitor-vc142-mt-gd-x64-1_74.lib
libboost_program_options-vc142-mt-gd-x64-1_74.lib
libboost_python38-vc142-mt-gd-x64-1_74.lib
libboost_random-vc142-mt-gd-x64-1_74.lib
libboost_regex-vc142-mt-gd-x64-1_74.lib
libboost_serialization-vc142-mt-gd-x64-1_74.lib
libboost_stacktrace_noop-vc142-mt-gd-x64-1_74.lib
libboost_stacktrace_windbg-vc142-mt-gd-x64-1_74.lib
libboost_stacktrace_windbg_cached-vc142-mt-gd-x64-1_74.lib
libboost_system-vc142-mt-gd-x64-1_74.lib
libboost_test_exec_monitor-vc142-mt-gd-x64-1_74.lib
libboost_thread-vc142-mt-gd-x64-1_74.lib
libboost_timer-vc142-mt-gd-x64-1_74.lib
libboost_type_erasure-vc142-mt-gd-x64-1_74.lib
libboost_unit_test_framework-vc142-mt-gd-x64-1_74.lib
libboost_wave-vc142-mt-gd-x64-1_74.lib
libboost_wserialization-vc142-mt-gd-x64-1_74.lib
libboost_zlib-vc142-mt-gd-x64-1_74.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
OpenNI2.lib

添加完毕后的效果:

依赖
在这里插入图片描述


到这一步环境配置问题就已经解决了!下面来跑几个例子试一试。

测试代码

PCL1.11.1+VS2019+WIN10代码示例:

#include <iostream>
#include <vector>
#include <ctime>
#include <pcl/point_cloud.h>
#include <pcl/octree/octree.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;
int
main(int argc, char** argv)
{
	srand((unsigned int)time(NULL));
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	// 创建点云数据
	cloud->width = 800;
	cloud->height = 1;
	cloud->points.resize(cloud->width * cloud->height);
	for (size_t i = 0; i < cloud->points.size(); ++i)
	{
		cloud->points[i].x = 100.0f * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].y = 100.0f * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].z = 100.0f * rand() / (RAND_MAX + 1.0f);
	}

	pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(0.1);
	
	// 初始化点云可视化对象
	boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("显示点云"));
	viewer->setBackgroundColor(0, 0, 0);  
	// 对点云着色可视化 (WHITE).
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>target_color(cloud, 255, 255, 255);
	viewer->addPointCloud<pcl::PointXYZ>(cloud, target_color, "target cloud");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "target cloud");

	// 等待直到可视化窗口关闭
	while (!viewer->wasStopped())
	{
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(1000));
	}

	return (0);
}

例子
完毕!ヾ(◍°∇°◍)ノ゙

其他可能用的到的

在相应的文件夹获取自己的链接库列表(获取文件名字)。

// 在对应文件夹内使用CMD运行如下代码
dir /b *.lib *>0.txt 回车 

对应文件夹内会生成0.txt名字的文件,里面会生成该文件夹所有文件的名字。
使用后别忘了把0.txt文件删掉。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值