Visual Studio中配置PCL
前言
在windows上开发PCL程序,首选IDE就是Visual Studio 。本文将介绍如何在VS中配置PCL。
一、下载安装包
把与VS版本对应PCL的AllInOne包下载下来。要下对安装包,需要了解安装包的命名的含义,以下面的一个AllInOne包的名字为例。
PCL-1.8.0-AllInOne-msvc2013-win32.exe
其中,1.8.0表示的PCL的版本号,然后2013表示这个安装包只适用于的编译器为msvc2013,具体编译器版本和Visual Studio的对应关系可以去VS官网查询,最后win32表示这个安装包只能用来开发32位的程序。
二、安装
整个安装过程需要注意以下三点,其它默认即可:
1.安装路径最好不要包括中文;
2.建议勾选上“Add PCL to the system PATH for all users”;
3.安装时,会提示安装OpenNI,这个建议安装在PCL安装路径的3rdParty下的OpenNI2文件夹中。
三、配置
根据当前需要编译的程序位数和传统的直接在“解决方案资源管理器”里选中项目右键设置项目属性的方式,不太灵活。这里以创建属性表的方式来配置VS。这个根据你当前需要生成的程序,往“属性管理器”里项目下对应子项里添加属性表,并配置属性表相关项目,即可成功编译PCL。
在新建的属性表里,有三个必须设置的重要项目:附加包含目录,附加库目录,附加依赖项。
1.附加包含目录,其在项目属性“C/C++”子项的“常规”里下,主要用来设置库的头文件路径。这里设置好PCL及第三方库的头文件路径。
2.附加库目录,其在项目属性的“连接器”子项的“常规”下,主要用来设置库的lib文件路径。这里设置好设置PCL及第三方库的lib文件路径。
3.附加依赖项,其在项目属性的“连接器”子项的“输入”下,主要用来设置编译所需的lib。这里设置好设置PCL及第三方库的lib文件名。
只有理解里上面这三项的作用,才能学到如何去解决配置中产生的一些问题。
在配置完属性表后,还需要配置dll。配置dll有四种方法,
第一种,把dll拷贝到system32里去,
第二种,把dll拷贝到编译出来的程序的文件中,
第三种,在系统的path中添加dll的路径,
第四种方法,直接配置到项目中。
本文用第四种方法配置,具体操作如下:
在“解决方案资源管理器”里选中项目右键点“属性”,然后选“调试”设置环境的变量值,规则如下:
PATH=;
(
P
A
T
H
)
在等号后添加所有
P
C
L
及第三方库的
d
l
l
路径以英文的“
;
”隔开,最后加上一个
(PATH) 在等号后添加所有PCL及第三方库的dll路径以英文的“;”隔开,最后加上一个
(PATH)在等号后添加所有PCL及第三方库的dll路径以英文的“;”隔开,最后加上一个(PATH)即可。例如我设置的如下:
PATH=$(PCL_ROOT)\bin;
$(PCL_ROOT)\3rdParty\FLANN\bin;
$(PCL_ROOT)\3rdParty\VTK\bin;
$(PCL_ROOT)\Qhull\bin;
$(PCL_ROOT)\3rdParty\OpenNI2\Tools;$(PATH)
小技巧:批量生成lib文件名方法
由于PCL中需要添加的lib文件较多,为了提高效率,可以用如下命令批量生成lib文件名。
DIR *d.lib /B >LIB.txt
其中*d.lib是Debug版本的lib文件,release版本需要做相应更改,LIB.txt是生成的LIB文件名,里面保存了各个lib文件名称。
四、测试
安装配置完成后,可用如下示例程序测试是否配置成功
#include<pcl/visualization/cloud_viewer.h>
#include<iostream>//标准C++库中的输入输出类相关头文件。
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>//pcd 读写类相关的头文件。
#include<pcl/io/ply_io.h>
#include<pcl/point_types.h> //PCL中支持的点类型头文件。
int main()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
char strfilepath[256] = "bunny.pcd";
if (-1 == pcl::io::loadPCDFile(strfilepath, *cloud)) //打开点云文件
{
std::cout << "error input!" << std::endl;
return -1;
}
std::cout<< cloud->points.size() << std::endl;
pcl::visualization::CloudViewer viewer("Cloud Viewer"); //创建viewer对象
viewer.showCloud(cloud);
system("pause");
return 0;
}