64位win7+PCL 1.8.0+VS2013,64位win10+PCL 1.8.0+VS2013

本文详细介绍了PCL-1.8.0在Windows 10和Windows 7系统下配合Visual Studio 2013的安装配置过程,包括准备工作、安装步骤、环境变量配置、项目配置等内容,并提供了测试代码及常见问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

感谢PCL-1.8.0-AllInOne VS2013 Win8 X64 安装配置及部分问题解决方法的文章,本文在其基础上稍作调整,希望可以帮到PCL用户和爱好者!(经过测试,新版的PCL缺少一些类,如:sensor_msgs,导致PointCloud2不能用。另外,本文适用于win10和win7,我在这两个系统上都安装好了。

Win7/win10 x64

Visual Studio 2013 (注意:VS2013安装包不区分64位和32位,所用位数都是在平台下自己设置)

我的百度网盘安装包:

PCL-1.8.0-msvc2013-64/32位链接:链接:https://pan.baidu.com/s/1ElnlIyEUaCAkFhf4gboxiQ 提取码:q1fd 
VS2013链接:https://pan.baidu.com/s/1Ewaa2nuTYXNyW0XPMkQihQ 密码:hvas

 

一.准备工作

 首先需要下载PCL-1.8.0-AllInOne安装包文件和相应的pdb文件

属性表可以不用下载,路径不同的情况下不能直接用,建议跟着教程自己新建属性表

 二.安装

1.PCL库安装

双击安装包,安装的时候注意选上“Add PCL to the system PATH for allusers”,这样安装程序会自动在系统环境变量中添加“PCL_ROOT”、“OPENNI2_INCLUDE64”、“OPENNI2_LIB64”、“OPENNI2_REDIST64”四个项。

注意:若安装结束后提示“路径过长无法添加环境变量”,这并不影响;如果安装结束后没有自动在系统环境变量中增加以上四项,则手动加上即可。添加路径过长可参看解决Windows7 Path环境变量过长的方法环境变量path的值大于1023的解决办法

RUDY选择了安装在C盘默认路径:C:\Program Files\PCL 1.8.0。

图示皆以我的安装路径为例。(下图为自动添加的环境变量,可检查一下,也可以暂时不管,因为一般都是自动添加,RUDY都没有去注意这个)

 

 2.OpenNI安装

安装过程中会弹出OpenNI的安装程序,可以选择将OpenNI的安装路径设置为“PCL_ROOT”下3rdParty\OpenNI2文件夹(但是rudy是安装在默认路径“C:\Program Files\OpenNI2”了,如果安装路径不同,那么不能应用同一个“项目属性表PCLDebug64.props必须新建,(这里可以选择安装在其他目录,但是需要重新建立第四章第二节的属性表。)

 3.pdb安装

安装程序执行完成后将pdb文件包解压(即PCL-1.8.0-AllInOne-msvc2013-win64-pdb.rar),pdb文件拷贝到“PCL_ROOT”下的bin文件夹中(即C:\Program Files\PCL 1.8.0\bin文件下)一般还需要将PDB复制到“C:\Windows\System32”目录下。

三.环境变量 

上面说过了安装程序会自动添加“PCL_ROOT”项到系统环境变量(不是用户变量)Path中,此外还要手动添加PCL、Qhull、FLANN、VTK、OpenNI2的bin目录以及%OPENNI2_REDIST64%到PATH(右击“我的电脑[此电脑]”,然后如下图,win7的对话框与win10略有不同,是在同一行添加,用分号隔开即可)中

WIN7的如图:

Win10的如图:

rudy的电脑中路径是(win7用“;”隔开,win10不用隔开,每行一条):

C:\ProgramFiles\PCL1.8.0\bin;

C:\ProgramFiles\PCL 1.8.0\3rdParty\Qhull\bin;

C:\ProgramFiles\PCL1.8.0\3rdParty\FLANN\bin;

C:\ProgramFiles\PCL1.8.0\3rdParty\VTK\bin;

C:\Program Files\OpenNI2\Tools;

(C:\Program Files\OpenNI2\Redist,可以不添加,因为“OPENNI2_REDIST64”自动添加了)

该篇博文原作者是用下图方式添加的环境变量,作用与rudy添加的方式没有区别:

注意:如果按照原作者的方式添加,而且安装程序没有自动添加“PCL_ROOT”,则需要手动填上,因为上图是将C:\Program Files\PCL 1.8.0简化成了PCL_ROOT。。。而且因为如果结合CMake等工具生成工程的话,PCLConfig.cmake文件是通过“PCL_ROOT”来找PCL库的。添加完毕后不要忘记了重启或者注销电脑。

 

四.项目配置

1.在VS2013中新建空项目并进行活动平台修改

 

 

注意VS2013中配置管理器(Configuration Manager)默认的活动平台(Active Solution plantform)是win32,如果安装的是x64的PCL,需要将其改成x64,否则编译的时候会出现奇怪的问题。修改方法如下:(注意,这是本文重点

打开“解决方案资源管理器”,右击刚才新建的项目(例如“ConsoleApplication1”),点击“属性”,进入程序属性页 -> 点击“配置管理器” -> 下拉“平台”按钮,点击“新建” -> 新建平台“x64”,选择从“win32”复制(之后就不用每次配置“环境目录”了,而且,生成的.exe也可以直接在dos命令下运行了,创建新的解决方案平台打钩 -> 完成。

原博客错:“从此处复制设置”选“空”,切记,不可选择“空”,一定要选择从“win32”复制。

  

2.新项目属性表的建立与设置也可以通过添加现有的属性表,就不用下面这些设置了,但是安装路径需要与现有属性表生成时的路径一致(主要是OpenNI2的安装路径不要不一致)

 切换到“属性管理器”视图,解决方案资源管理器(Property Manager)与属性管理器(Solution Explorer)在同一个tab布局中,如果没找到的话,按如下方式打开:

菜单栏的“视图”(View) -> 其他窗口(Other Windows) -> 属性管理器(Property Manager)。

在项目PCLTest的“Debug | 64”下右键添加新项目属性表,取名PCLDebug64.props。双击该项目属性表,打开其属性页并进行以下四项操作

(1)修改左侧“VC++目录”下的“包含目录”。

添加设置如下:

(2)修改左侧“VC++目录”下的“库目录”。

添加设置如下:

(3)点击左侧“连接器” -> 点击“输入” -> 添加相关的“附加依赖项”。

添加配置如下:

pcl_apps_debug.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_simulation_debug.lib 
pcl_stereo_debug.lib 
pcl_surface_debug.lib 
pcl_tracking_debug.lib 
pcl_visualization_debug.lib 
libboost_atomic-vc120-mt-gd-1_59.lib 
libboost_chrono-vc120-mt-gd-1_59.lib 
libboost_container-vc120-mt-gd-1_59.lib 
libboost_context-vc120-mt-gd-1_59.lib 
libboost_coroutine-vc120-mt-gd-1_59.lib 
libboost_date_time-vc120-mt-gd-1_59.lib 
libboost_exception-vc120-mt-gd-1_59.lib 
libboost_filesystem-vc120-mt-gd-1_59.lib 
libboost_graph-vc120-mt-gd-1_59.lib 
libboost_iostreams-vc120-mt-gd-1_59.lib 
libboost_locale-vc120-mt-gd-1_59.lib 
libboost_log-vc120-mt-gd-1_59.lib 
libboost_log_setup-vc120-mt-gd-1_59.lib 
libboost_math_c99-vc120-mt-gd-1_59.lib 
libboost_math_c99f-vc120-mt-gd-1_59.lib 
libboost_math_c99l-vc120-mt-gd-1_59.lib 
libboost_math_tr1-vc120-mt-gd-1_59.lib 
libboost_math_tr1f-vc120-mt-gd-1_59.lib 
libboost_math_tr1l-vc120-mt-gd-1_59.lib 
libboost_mpi-vc120-mt-gd-1_59.lib 
libboost_prg_exec_monitor-vc120-mt-gd-1_59.lib 
libboost_program_options-vc120-mt-gd-1_59.lib 
libboost_random-vc120-mt-gd-1_59.lib 
libboost_regex-vc120-mt-gd-1_59.lib 
libboost_serialization-vc120-mt-gd-1_59.lib 
libboost_signals-vc120-mt-gd-1_59.lib 
libboost_system-vc120-mt-gd-1_59.lib 
libboost_test_exec_monitor-vc120-mt-gd-1_59.lib 
libboost_thread-vc120-mt-gd-1_59.lib 
libboost_timer-vc120-mt-gd-1_59.lib 
libboost_unit_test_framework-vc120-mt-gd-1_59.lib 
libboost_wave-vc120-mt-gd-1_59.lib 
libboost_wserialization-vc120-mt-gd-1_59.lib 
flann-gd.lib 
flann_cpp_s-gd.lib 
flann_s-gd.lib 
qhull-gd.lib 
qhullcpp-gd.lib 
qhullstatic-gd.lib 
qhullstatic_r-gd.lib 
qhull_p-gd.lib 
qhull_r-gd.lib 
vtkalglib-7.0-gd.lib 
vtkChartsCore-7.0-gd.lib 
vtkCommonColor-7.0-gd.lib 
vtkCommonComputationalGeometry-7.0-gd.lib 
vtkCommonCore-7.0-gd.lib 
vtkCommonDataModel-7.0-gd.lib 
vtkCommonExecutionModel-7.0-gd.lib 
vtkCommonMath-7.0-gd.lib 
vtkCommonMisc-7.0-gd.lib 
vtkCommonSystem-7.0-gd.lib 
vtkCommonTransforms-7.0-gd.lib 
vtkDICOMParser-7.0-gd.lib 
vtkDomainsChemistry-7.0-gd.lib 
vtkDomainsChemistryOpenGL2-7.0-gd.lib 
vtkexoIIc-7.0-gd.lib 
vtkexpat-7.0-gd.lib 
vtkFiltersAMR-7.0-gd.lib 
vtkFiltersCore-7.0-gd.lib 
vtkFiltersExtraction-7.0-gd.lib 
vtkFiltersFlowPaths-7.0-gd.lib 
vtkFiltersGeneral-7.0-gd.lib 
vtkFiltersGeneric-7.0-gd.lib 
vtkFiltersGeometry-7.0-gd.lib 
vtkFiltersHybrid-7.0-gd.lib 
vtkFiltersHyperTree-7.0-gd.lib 
vtkFiltersImaging-7.0-gd.lib 
vtkFiltersModeling-7.0-gd.lib 
vtkFiltersParallel-7.0-gd.lib 
vtkFiltersParallelImaging-7.0-gd.lib 
vtkFiltersProgrammable-7.0-gd.lib 
vtkFiltersSelection-7.0-gd.lib 
vtkFiltersSMP-7.0-gd.lib 
vtkFiltersSources-7.0-gd.lib 
vtkFiltersStatistics-7.0-gd.lib 
vtkFiltersTexture-7.0-gd.lib 
vtkFiltersVerdict-7.0-gd.lib 
vtkfreetype-7.0-gd.lib 
vtkGeovisCore-7.0-gd.lib 
vtkglew-7.0-gd.lib 
vtkGUISupportQt-7.0-gd.lib 
vtkGUISupportQtSQL-7.0-gd.lib 
vtkhdf5-7.0-gd.lib 
vtkhdf5_hl-7.0-gd.lib 
vtkImagingColor-7.0-gd.lib 
vtkImagingCore-7.0-gd.lib 
vtkImagingFourier-7.0-gd.lib 
vtkImagingGeneral-7.0-gd.lib 
vtkImagingHybrid-7.0-gd.lib 
vtkImagingMath-7.0-gd.lib 
vtkImagingMorphological-7.0-gd.lib 
vtkImagingSources-7.0-gd.lib 
vtkImagingStatistics-7.0-gd.lib 
vtkImagingStencil-7.0-gd.lib 
vtkInfovisCore-7.0-gd.lib 
vtkInfovisLayout-7.0-gd.lib 
vtkInteractionImage-7.0-gd.lib 
vtkInteractionStyle-7.0-gd.lib 
vtkInteractionWidgets-7.0-gd.lib 
vtkIOAMR-7.0-gd.lib 
vtkIOCore-7.0-gd.lib 
vtkIOEnSight-7.0-gd.lib 
vtkIOExodus-7.0-gd.lib 
vtkIOExport-7.0-gd.lib 
vtkIOGeometry-7.0-gd.lib 
vtkIOImage-7.0-gd.lib 
vtkIOImport-7.0-gd.lib 
vtkIOInfovis-7.0-gd.lib 
vtkIOLegacy-7.0-gd.lib 
vtkIOLSDyna-7.0-gd.lib 
vtkIOMINC-7.0-gd.lib 
vtkIOMovie-7.0-gd.lib 
vtkIONetCDF-7.0-gd.lib 
vtkIOParallel-7.0-gd.lib 
vtkIOParallelXML-7.0-gd.lib 
vtkIOPLY-7.0-gd.lib 
vtkIOSQL-7.0-gd.lib 
vtkIOVideo-7.0-gd.lib 
vtkIOXML-7.0-gd.lib 
vtkIOXMLParser-7.0-gd.lib 
vtkjpeg-7.0-gd.lib 
vtkjsoncpp-7.0-gd.lib 
vtklibxml2-7.0-gd.lib 
vtkmetaio-7.0-gd.lib 
vtkNetCDF-7.0-gd.lib 
vtkNetCDF_cxx-7.0-gd.lib 
vtkoggtheora-7.0-gd.lib 
vtkParallelCore-7.0-gd.lib 
vtkpng-7.0-gd.lib 
vtkproj4-7.0-gd.lib 
vtkRenderingAnnotation-7.0-gd.lib 
vtkRenderingContext2D-7.0-gd.lib 
vtkRenderingContextOpenGL2-7.0-gd.lib 
vtkRenderingCore-7.0-gd.lib 
vtkRenderingFreeType-7.0-gd.lib 
vtkRenderingImage-7.0-gd.lib 
vtkRenderingLabel-7.0-gd.lib 
vtkRenderingLOD-7.0-gd.lib 
vtkRenderingOpenGL2-7.0-gd.lib 
vtkRenderingQt-7.0-gd.lib 
vtkRenderingVolume-7.0-gd.lib 
vtkRenderingVolumeOpenGL2-7.0-gd.lib 
vtksqlite-7.0-gd.lib 
vtksys-7.0-gd.lib 
vtktiff-7.0-gd.lib 
vtkverdict-7.0-gd.lib 
vtkViewsContext2D-7.0-gd.lib 
vtkViewsCore-7.0-gd.lib 
vtkViewsInfovis-7.0-gd.lib 
vtkViewsQt-7.0-gd.lib 
vtkzlib-7.0-gd.lib


 

(4)点击左侧“C/C++” -> 点击“预处理器” -> 添加相关的“预处理器定义”。

添加设置为:(个人以为可以不用设置,但我第一次新建属性表的时候设置了也就没改)

_SCL_SECURE_NO_WARNINGS

_CRT_SECURE_NO_WARNINGS

_SCL_SECURE_NO_WARNINGS  
_CRT_SECURE_NO_WARNINGS  

 

对该新建立的“项目属性表”进行以上四步操作后,可以把这个属性文件保存出来,每次用的时候在新建项目里导入就可以了。

 

 

 五、测试代码

 我用的是PCL1.7.2以后的新版本中才有的regiongrowing函数,为了方便大家运行,我打包上传了,大家可以直接点击.sln打开工程运行。详见:https://download.youkuaiyun.com/download/liukunrs/10463584

也可以使用下列代码:

#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
 
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);
 
	//FIXME: possible race condition here:
	user_data++;
}
 
int main()
{
	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;
}

如果出现如下图所示则说明没有问题,配置成功:

如果出现下图状态(博主就是),上下划几下鼠标,再滚几下滚轮,就好了。

如果出现“vtkRenderingOpenGL2-7.0-gd.pdb”等VTK相关问题,那么参见本文第九节

 

六、环境变量path的值大于1023的解决办法

 1.计算机—>属性—>更改设置—>高级—>环境变量

 2.然后编辑Path,全选将其中的路径全部复制出来。新建一个系统变量取名path2,将复制的内容放入其中。

 3.然后再Path中建立一个引用。也就是引用path1的路径。

 方法:在path中开头或者结尾中放入%path1%  注意前后加;就行

例如:把”%PCL_ROOT%\bin;%PCL_ROOT%\3rdParty\Qhull\bin;%PCL_ROOT%\3rdParty\FLANN\bin;%PCL_ROOT%\3rdParty\VTK\bin;%PCL_ROOT%\3rdParty\OpenNI2\Tools;%OPENNI2_REDIST64%”剪切出来,放到新建的Path1中,而原Path中在最后加上“%Path1%”

七、遇到的问题:

1、如果头文件中包含了

#include <pcl/sample_consensus/model_types.h>

那么会出现pcl::SAC_SAMPLE_SIZE的报错,可查看我优快云博客解决:https://blog.youkuaiyun.com/liukunrs/article/details/80361134

八、环境变量path的值大于1023的解决办法

1.计算机—>属性—>更改设置—>高级—>环境变量

2.然后编辑Path,全选将其中的路径全部复制出来。新建一个系统变量取名path2,将复制的内容放入其中。

3.然后再Path中建立一个引用。也就是引用path1的路径。

方法:在path中开头或者结尾中放入%path1%  注意前后加“;”就行

例如:把”%PCL_ROOT%\bin;%PCL_ROOT%\3rdParty\Qhull\bin;%PCL_ROOT%\3rdParty\FLANN\bin;%PCL_ROOT%\3rdParty\VTK\bin;%PCL_ROOT%\3rdParty\OpenNI2\Tools;%OPENNI2_REDIST64%”剪切出来,放到新建的Path1中,而原Path中在最后加上“%Path1%”

九、出现“vtkRenderingOpenGL2-7.0-gd.pdb”等VTK相关问题

这是由于VTK只支持英伟达的显卡(与CloudCompare不能正常打开的问题很类似)。

1.如果出现这种问题,首先确保你有独立显卡(英伟达的)。

2.找开显卡设置面板,将全局设置那一栏下的首先图形处理器设为高性能NVDIA处理器。

十、C:\Windows\System32无法打开PDB

所以还需要将复制到PDB文件复制一份到该目录下

已加载“C:\Windows\System32\apphelp.dll”。无法查找或打开 PDB 文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值