设为首页收藏本站 距【华南国际工业博览会】开幕 : :

51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 420|回复: 1
收起左侧

[点云技术] 点云库PCL从入门到精通常见的编译错误

[复制链接]
  • TA的每日心情
    点赞
    1 小时前
  • 签到天数: 100 天

    连续签到: 1 天

    [LV.6]常住居民II

    30

    主题

    131

    帖子

    4250

    积分

    Rank: 6Rank: 6

    积分
    4250

    切换助手验证会员

    发表于 2020-11-7 10:15:05 | 显示全部楼层 |阅读模式

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    (1)error c4996: 'fopen': This function or variable may be unsafe
    解决方法:项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加: _CRT_SECURE_NO_DEPRECATE。
    参考博文:https://blog.csdn.net/wangyang20170901/article/details/78810068

    (2)...\flann\algorithms\dist.h(523): error C3861: “pop_t”: 找不到标识符
    解决方法:双击该行输出直接打开dist.h头文件;将第503行的typedef unsigned long long pop_t;移动到第480行前面。
    参考博文:https://blog.csdn.net/weixin_41991128/article/details/83864713

    (3)boost\typeof\msvc\typeof_impl.hpp(125): error C2988: 不可识别的模板声明/定义
    解决方法:可以代码的源文件最开头的位置加上对BOOST_TYPEOF_EMULATION的定义:  
    1. #define BOOST_TYPEOF_EMULATION
    2. #include <pcl\registration\icp.h>
    复制代码

    参考博文:https://blog.csdn.net/qq_39031960/article/details/83544928

    (4)error C4996: 'pcl::SAC_SAMPLE_SIZE': This map is deprecated and is kept only to prevent breaking existing user code. Starting from PCL 1.8.0 model sample size is a protected member of the SampleConsensusModel class。
    解决方法:打开项目属性页>C/C++>常规>SDL检查(设置为否)。
    参考博文:https://blog.csdn.net/qing101hua/article/details/70739391

    (5)Failed to find match for field 'rgba'.(例子5-1)
    解决方法:用word打开pcd文件查看的类型,发现 Fields不包含RGBA。将PCL::PointXYZRGBA修改为pcl::PointXYZ。
    20200407213624803.png

    (6) Error:no override found for 'vtkPolyDataMapper'(例子5-1)
    解决方法:在源文件的开头加上:
    1. #include <vtkAutoInit.h>
    2. VTK_MODULE_INIT(vtkRenderingOpenGL);
    3. VTK_MODULE_INIT(vtkInteractionStyle);
    复制代码
    参考博文:https://blog.csdn.net/zzh_AI/article/details/88861221

    (7) error C2039: “camera_”: 不是“pcl::visualization::PCLVisualizer”的成员(例5-2)
    解决方法:最新的pcl已经没有camera_成员了。所以需要替换为:
    1. viewer.camera_.pos[0] = pos_vector[0];
    2. viewer.camera_.pos[1] = pos_vector[1];
    3. viewer.camera_.pos[2] = pos_vector[2];
    4. viewer.camera_.focal[0] = look_at_vector[0];
    5. viewer.camera_.focal[1] = look_at_vector[1];
    6. viewer.camera_.focal[2] = look_at_vector[2];
    7. viewer.camera_.view[0] = up_vector[0];
    8. viewer.camera_.view[1] = up_vector[1];
    9. viewer.camera_.view[2] = up_vector[2];
    10. /***将以上的代码替换为以下函数*****/
    11. viewer.setCameraPosition(pos_vector[0], pos_vector[1], pos_vector[2],
    12.                 look_at_vector[0], look_at_vector[1], look_at_vector[2],
    13.                 up_vector[0], up_vector[1], up_vector[2]);
    复制代码
    参考博文:https://www.cnblogs.com/li-yao7758258/p/6444207.html

    (8)range_image_visualization.cpp(129): error C3861: “sleep”: 找不到标识符(pcl_sleep识别不了。例5-2)
    解决方法:定位到pcl_sleep的头文件pcl_macros.h,修改pcl_sleep的宏定义sleep(x) 为Sleep(x),【首字母大写】
    参考博文:https://blog.csdn.net/m0_37906001/article/details/97785515

    (9)法向显示错误ERROR:no override found for 'vtkActor'.(例5-3)
    解决方法:在源文件中添加:
    1. #include <vtkAutoInit.h>
    2. VTK_MODULE_INIT(vtkRenderingOpenGL);
    复制代码


    (10)“error C2653: “sensor_msgs”: 不是类或命名空间名称”
    解决方法:在PCL1.8中将PointCloud2加入了pcl名字空间,sensor_msgs是旧的方式,不再使用。将以下代码修改为:
    1. sensor_msgs::PointCloud2::Ptr cloud (new sensor_msgs::PointCloud2 ());
    2. sensor_msgs::PointCloud2::Ptr cloud_filtered (new sensor_msgs::PointCloud2 ());
    3. //以上两行替换为
    4. pcl::PCLPointCloud2::Ptr cloud(new pcl::PCLPointCloud2());
    5. pcl::PCLPointCloud2::Ptr cloud_filtered(new pcl::PCLPointCloud2());
    复制代码
    参考博文:https://blog.csdn.net/zfjBIT/article/details/92595768

    (11)error C2039: “fromROSMsg”: 不是“pcl”的成员
    解决方法:
    1. pcl::fromROSMsg(*cloud_filtered_blob, *cloud_filtered);
    2. //将以上代码修改为
    3. pcl::fromPCLPointCloud2(*cloud_filtered_blob, *cloud_filtered);
    复制代码


    (12)error C2039: “compute”: 不是“pcl::UniformSampling<PointType>”的成员。(例8-4)
    解决方法:
    1. //将下面的两行替换
    2. //uniform_sampling.compute(sampled_indices);
    3. //pcl::copyPointCloud(*model, sampled_indices.points, *model_keypoints);
    4. //将上面的两行替换为下面的一行
    5. uniform_sampling.filter(*model_keypoints);   //滤波
    复制代码


    (13)使用OpenMP报错,“User Error 1001: argument to num_threads clause must be positive”
    解决办法:这是由于设置的线程数必须为正,而程序中可能没有设置,有时候甚至环境变量中设置了,但是依然报错,我们不妨手动设置一下,使用setNumberOfThreads()函数设置一个线程数。例如对于PCL中的一段程序:
    1. pcl::SHOTEstimationOMP<PointType, NormalType, DescriptorType> descr_est;
    2. descr_est.setNumberOfThreads(4);
    3. descr_est.setRadiusSearch(descr_rad_);

    4. descr_est.setInputCloud(model_keypoints);
    5. descr_est.setInputNormals(model_normals);
    6. descr_est.setSearchSurface(model);
    7. descr_est.compute(*model_descriptors);
    复制代码
    参考博文:https://blog.csdn.net/lch_vison/article/details/80806454

    (14)error C2589: “(”:“::”右边的非法标记错误的处理
    函数模板中的std::max或者std::min与Visual C++中的全局的宏max冲突。

           解决办法:

           第一种办法:设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Visual C++的min/max宏定义。项目属性——> C/C++ ——> 预处理器 ——> 预处理器定义 (此处添加预定义编译开关   NOMINMAX)

    但是visual C++中定义能自动匹配double和int,如果进行了上述设置,代码中手动将int型的数据乘以1.0来达到double的目的。

           第二种办法: 加上括号,与Vsual C++的min/max宏定义区分开:(std::numeric_limits<double>::max)()

           参考博文:原文链接:https://blog.csdn.net/martinkeith/article/details/90896584

    (15)error C2440: “初始化”: 无法从“const float [3]”转换为“Eigen::Map<const Eigen::Vector3f,0,Eigen::Stride<0,0>>”
    解决办法:将以下代码替换为:
    1. Eigen::Map<const Eigen::Vector3f> point_a_normal = point_a.normal, point_b_normal = point_b.normal;
    2. ]//将以上代码替换为下面的代码
    3. Eigen::Map<const Eigen::Vector3f> point_a_normal = point_a.getNormalVector3fMap(), point_b_normal = point_b.getNormalVector3fMap();
    复制代码

    转载自:https://blog.csdn.net/jacken123456/article/details/105361314




    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    点赞
    2021-1-24 19:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    0

    主题

    59

    帖子

    100

    积分

    Rank: 1

    积分
    100

    切换助手验证会员

    发表于 2021-1-24 18:55:13 | 显示全部楼层
    大神威武

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则


    建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用

    申请友链| 小黑屋| 手机版| Archiver| 有问题需要咨询站长?|  

    © 2015-2021 51Halcon机器视觉  X3.4  粤ICP备15095995号-2 粤公网安备44030602000670号

    快速回复 返回顶部 返回列表