1    下载

把与VS版本对应PCL的AllInOne包下载下来。要下对安装包,需要了解安装包的命名的含义,以下面的一个AllInOne包的名字为例。

PCL-1.8.0-AllInOne-msvc2013-win32.exe

其中,1.8.0表示的PCL的版本号,然后2013表示这个安装包只适用于VS2013中使用,其它VS版本不行,最后win32表示这个安装包只能用来开发32位的程序。

再以下面的安装包名字为例。

PCL-1.7.2-AllInOne-msvc2012-win64.exe

这个安装包是PCL1.7.2版本的,其只能用在VS2012上,然后使用在64位的VS项目开发中。

注意一定要下载正确与VS版本以及想要开发的程序位数对应的AllInOne包。

下载地址:http://www.zhangzscn.com/,http://unanancyowen.com/

2    安装

整个安装过程需要注意以下三点,其它默认即可:

  1. 安装路径最好不要包括中文;
  2. 建议勾选上“AddPCLtothesystemPATHforallusers”;
  3. 安装时,会提示安装OpenNI,这个建议安装在PCL安装路径的3rdParty下的OpenNI2文件夹中。

3    新建

一般在VS里创建一个C++的控制台项目,根据自己的意愿设置一下项目名和路径。在新建过程中注意以下两点,其它默认即可:

  1. 去掉“预编译头(P)”前的勾
  2. 去掉“安全开发生命周期(SDL)检查(C)”前的勾。

4    配置

在配置项目属性环节,需要了解的是编译出来的程序分为两种32位和64位。不同位数的程序需要对应版本的lib和dll才能编译成功。这里想要编译什么位数的程序,下载对应位数的PCL即可。不同位数的程序又分为:Debug和Release。默认生成的是Debug程序。编译Debug版本的程序需要Debug版本的lib和dll,编译Release版本的程序需要Release版本的lib和dll。这些lib和dll在PCL的安装路径路径里有。如果需要生成上述四种程序,需要分别设置对应的项目属性表。

根据当前需要编译的程序位数和传统的直接在“解决方案资源管理器”里选中项目右键设置项目属性的方式,不太灵活。这里以创建属性表的方式来配置VS。这个根据你当前需要生成的程序,往“属性管理器”里项目下对应子项里添加属性表,并配置属性表相关项目,即可成功编译PCL。

注意:VS默认只生成32位的程序,如果需要生成64的程序,方法如下:VS界面有个运行项,后面有个debug,在后面有个叫“解决方案平台”的下拉框,其值默认为win32,需要把win32,改成x64,方法是,点win32的箭头,点“配置管理器”,点“活动解决方案平台”,点“新建”,把“键入或选择新平台”,这一项,切换为x64,然后确定,此时,原来的win32已变为x64。这时编译生成的程序就是64位版本的。

添加属性表的话,找到“属性管理器”,然后点击项目的小箭头,如果是32的程序,会出来以下两项:Debug|Win32以及Release|Win32,而如果是64位的程序,则会多出两项:Debug|x64以及Release|x64。选中其中一项,右键点击“添加新项目属性表”,在弹出的对话框里设置好对应的属性表名和路径。确认之后,在该项中就会多出一项以刚才属性表名为名称的属性表。

在新建的属性表里,有三个必须设置的重要项目:附加包含目录,附加库目录,附加依赖项。

  1. 附加包含目录,其在项目属性“C/C++”子项的“常规”里下,主要用来设置库的头文件路径。这里设置好PCL及第三方库的头文件路径。
  2. 附加库目录,其在项目属性的“连接器”子项的“常规”下,主要用来设置库的lib文件路径。这里设置好设置PCL及第三方库的lib文件路径。
  3. 附加依赖项,其在项目属性的“连接器”子项的“输入”下,主要用来设置编译所需的lib。这里设置好设置PCL及第三方库的lib文件名。

只有理解里上面这三项的作用,才能学到如何去解决配置中产生的一些问题。

在配置完属性表后,还需要配置dll。配置dll有四种方法,第一种,把dll拷贝到system32里去,第二种,把dll拷贝到编译出来的程序的文件中,第三种,在系统的path中添加dll的路径,本文选用第四种方法,直接配置到项目中。具体方法如下:

在“解决方案资源管理器”里选中项目右键点“属性”,然后选“调试”设置环境的变量值,规则如下:

PATH=;$(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)

大家根据自己的安装路径,灵活变通。

5    开发

完成上述步骤后,就可以把代码拷贝到新建立的项目的cpp文件中去,然后编译,运行。测试一下是否运行成功。测试代码如下。

#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;

}

6    常见问题

配置PCL的过程是比较复杂的,需要根据自己的情况灵活调整。下面就配置过程中可能会遇到的典型问题,给出其解决方案。

  1. 找不到xxx.h

这个问题是因为在设置include,即设置附加包含目录,路径不对或缺少导致的,根据提示,找到对应错误的库的头文件路径,更该即可。

  1. 找不到xxx.lib

这个问题和上一个问题很像,是附加库目录中,路径不对或缺少导致的,根据提示,修改对应的路径即可。

注意:如果设置了,还是提示找不到头文件或lib,这时就要查看一下PCL的安装路径下有没有这个头文件或lib,如果有,说明你的路径设置的还是有问题,如果搜索不到这个头文件,那就要修改代码,可能是版本原因导致这个头文件没了,如果搜索不到lib文件,那么把这个lib从附加依赖项里删除。

  1. 无法解析的外部符号

这个问题比较难解决,总结起来有四大原因:

  • 安装包版本不对
  • 项目的位数和PCL库的位数不对
  • 缺少对应的lib
  • 只有声明,没有定义

第一个找对安装包即可,第二个修改项目位数和PCL库的位数一致即可,第三个要根据经验去添加上lib文件,第四个的话,在预处理器里添加PCL_NO_PRECOMPILE即可,当然上面只是经验之谈,要根据实际情况做出调整。

2.

问题描述

error C4996: ‘std::_Uninitialized_copy0’: Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ ‘Checked Iterators’ d:\program files\microsoft visual studio 12.0\vc\include\xmemory 348 1 test2

参考:http://blog.csdn.net/lanchunhui/article/details/50900367

解决方法

右键工程名,进入工程属性页,依次选中:

编辑【预处理定义】,如错误提示所说,添加,_SCL_SECURE_NO_WARNINGS:

PCL配置即常见问题的更多相关文章

  1. windows 下配置 Nginx 常见问题(转)

    windows 下配置 Nginx 常见问题 因为最近的项目需要用到负载均衡,不用考虑,当然用大名鼎鼎的Nginx啦.至于Nginx的介绍,这里就不多说了,直接进入主题如何在Windows下配置. 我 ...

  2. Mysql基本配置以及常见问题

    以下是MYSQL的基本配置以及常见问题的解决方式 1.获取客户端 https://dev.mysql.com/downloads/ 有两种方式获取到MYSQL,一种是通过MySQL Community ...

  3. VS2010+PCL配置

    原文出自(转载): http://blog.csdn.net/renshengrumenglibing/article/details/9073675 1.安装 pcl 的完全安装包可以到: http ...

  4. OpenCV3.2.0+VS2017环境配置与常见问题(巨细坑爹版)

    目录 安装 常见问题 题外话:首先,配环境一定要有耐心... 本博客是本小白第一次装OpenCV成功后第一时间整理发布.用的是刚下载好的OpenCV3.2.0版,用x64编译器Debug运行(当然Re ...

  5. centos6配置网络常见问题

    1. 启用网卡 查看网卡模块: lsmod 移除网卡:modprobe -r e1000 装载网卡: modprobe e1000 2. 配置网络 vim /etc/sysconfig/network ...

  6. PCL:全程详解 VS2010+PCL配置

    浑浑噩噩半年时间,终于不得不干点和机器人有关的东西.ICRA和IROS推荐的三维图形库-点云库,几乎成了机器人视觉算法的标配. 参考了几篇文章,最后终于配置成功. 下面是文章地址: 这个有点看头,累积 ...

  7. jeecg代码生成器配置及常见问题

    jeecg_database.properties 以mysql为例: diver_name=com.mysql.jdbc.Driver url=jdbc:mysql://192.168.*.*:33 ...

  8. WAMP(Windows、Apache、MySQL、php)安装配置过程常见问题

    WAMP(Windows.Apache.MySQL.php)安装配置过程 可以参考该网友的总结(总结的不错,鼓掌!!): http://www.cnblogs.com/pharen/archive/2 ...

  9. Rabbit MQ安装配置及常见问题

    Window安装 1:RabbitMQ安装 1.1:安装Erlang:http://www.erlang.org/ 1.2:安装RabbitMQ:http://www.rabbitmq.com/dow ...

随机推荐

  1. ES6之主要知识点(二) 变量的解构赋值。默认值

    引自http://es6.ruanyifeng.com/#docs/destructuring 数组解构赋值 默认值 对象解构赋值 用途 1.数组的解构赋值 let [a, b, c] = [1, 2 ...

  2. jsp 页面跳转后修改数据,返回时不更新

    项目jsp页面上用隐藏input框接收获取数据,在跳转入另一页面前,js操作修改数据,但返回时发现无效. 需求是点击抽奖后机会减少一次,但是当做跳转操作后返回时,次数有缓存问题 jsp: <in ...

  3. Activiti流程定义部署、删除

    1.部署流程定义 部署流程定义也可以认为是增加流程定义.  首先创建流程引擎对象(公用的方法)   private ProcessEngine processEngine = ProcessEngin ...

  4. AlexNet模型

    AlexNet模型 <ImageNet Classification with Deep Convolutional Neural Networks>阅读笔记 一直在使用AlexNet,本 ...

  5. 周期串Uva455 P37 3-4

    A character string is said to have period k if it can be formed by concatenating one or more repetit ...

  6. php条件语句(一)

    PHP If...Else 语句 条件语句用于根据不同条件执行不同动作. PHP 条件语句 当您编写代码时,您常常需要为不同的判断执行不同的动作.您可以在代码中使用条件语句来完成此任务. 在 PHP ...

  7. Spring注解驱动开发(五)-----扩展原理

    扩展原理 1.BeanPostProcessor-----bean后置处理器,bean创建对象初始化前后进行拦截工作的 2.BeanFactoryPostProcessor-----beanFacto ...

  8. 开方运算的DSP实现

    //=============================================== //函数名:VSqrt3 //功能:  实现对32位定点数的开方 //性能:  60M主频28015 ...

  9. Ajax技术 - (Asynchronous JavaScript + XML)

    Ajax Ajax = 异步JavaScript和XML,Ajax是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新.可以再网页不重新加载的情况下, ...

  10. Python爬虫笔记【一】模拟用户访问之验证码清理(4)

    清理图片,对图片进行二值化,去边框,去干扰线,去点 from PIL import Image from pytesseract import * from fnmatch import fnmatc ...