zoukankan      html  css  js  c++  java
  • 解决PCL MLS : error LNK2019; error LNK2001 virtual MovingLeastSquares process performProcessing问题

    PCL 基于多项式拟合的法线估计、点云平滑和数据重采样

    在使用Window VS2010为开发平台,学习PCL点云库的时候,学到曲面重建(Surface)。在测试下面的程序的时候,遇到了问题。

    #include <pcl/point_types.h>
    #include <pcl/io/pcd_io.h>
    #include <pcl/io/io.h>
    #include <pcl/io/ply_io.h>
    #include <pcl/kdtree/kdtree_flann.h>
    #include <pcl/surface/mls.h>
    #include <iostream>
    #include <pcl/visualization/cloud_viewer.h>
    
    #include <pcl/console/print.h>
    #include <pcl/console/parse.h>
    #include <pcl/console/time.h>
    
    using namespace std;
    using namespace pcl;
    using namespace pcl::io;
    using namespace pcl::console;
    int
    main (int argc, char** argv)
    {
      cout << "Project Begin: " << endl;
      // Load input file into a PointCloud<T> with an appropriate type
      pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA> ());
      // Load bun0.pcd -- should be available with the PCL archive in test
      pcl::io::loadPCDFile ("pcl_point_cloud/phase2d_1.pcd", *cloud);
    
      cout << "Read .pcd File Final. " << endl;
      cout << "This cloud Points number is :" << cloud->points.size() << endl;
    
      // Create a KD-Tree
      pcl::search::KdTree<pcl::PointXYZRGBA>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZRGBA>);
    
      // Output has the PointNormal type in order to store the normals calculated by MLS
      pcl::PointCloud<pcl::PointXYZRGBNormal> mls_points;
    
      // Init object (second point type is for the normals, even if unused)
      pcl::MovingLeastSquares<pcl::PointXYZRGBA, pcl::PointXYZRGBNormal> mls;
    
      mls.setComputeNormals (true);
    
      //Set parameters
      mls.setInputCloud(cloud);
      mls.setPolynomialFit(true);
      mls.setSearchMethod(tree);
      mls.setSearchRadius(.1);
    
      TicToc tt;
      tt.tic ();
    
      print_highlight ("Processing "); 
      // Reconstruct
      mls.process(mls_points);
      print_info ("[done, "); print_value ("%g", tt.toc ()); print_info (" ms]
    "); 
    
      cout << "Smoothing Processing cloud Points Final." << endl;
    
      std::cout << "After MLS , point cloud size is " << mls_points.size() << std::endl;
    
      // Save output
      pcl::io::savePCDFile ("phase2d-mls.pcd", mls_points);
    
      cout << "Save .PCD file Final !" << endl;
      cout << "New The New Cloud Points number is : " << mls_points.points.size() << endl;
    
      getchar();
      return 0;
    }

    VS2010编译这段程序的时候,出现了下面的链接错误:

    1>Smoothing_Cloud.obj : error LNK2019: 无法解析的外部符号 "public: virtual void __thiscall pcl::MovingLeastSquares<struct pcl::PointXYZRGBA,struct pcl::PointXYZRGBNormal>::process(class pcl::PointCloud<struct pcl::PointXYZRGBNormal> &)" (?process@?$MovingLeastSquares@UPointXYZRGBA@pcl@@UPointXYZRGBNormal@2@@pcl@@UAEXAAV?$PointCloud@UPointXYZRGBNormal@pcl@@@2@@Z),该符号在函数 _main 中被引用
    1>Smoothing_Cloud.obj : error LNK2001: 无法解析的外部符号 "private: virtual void __thiscall pcl::MovingLeastSquares<struct pcl::PointXYZRGBA,struct pcl::PointXYZRGBNormal>::performProcessing(class pcl::PointCloud<struct pcl::PointXYZRGBNormal> &)" (?performProcessing@?$MovingLeastSquares@UPointXYZRGBA@pcl@@UPointXYZRGBNormal@2@@pcl@@EAEXAAV?$PointCloud@UPointXYZRGBNormal@pcl@@@2@@Z)
    1> fatal error LNK1120: 2 个无法解析的外部命令
    1>
    1>生成失败。

    解决办法:
    添加下面这个头文件:

    #include <pcl/surface/impl/mls.hpp>

    再次编译,问题解决。


    参考网站:
    http://docs.ros.org/hydro/api/pcl/html/mls_8hpp.html
    http://d.hatena.ne.jp/takmin/comment?date=20130719

  • 相关阅读:
    HTTP——学习笔记(3)
    HTTP——状态码
    HTTP——学习笔记(2)
    HTTP——学习笔记(1)
    Sqlserver 存储过程
    Sqlserver 函数(例子)
    Sqlserver 函数
    sqlserver字段类型
    redis入门笔记(2)
    redis入门笔记(1)
  • 原文地址:https://www.cnblogs.com/aobosir/p/5928663.html
Copyright © 2011-2022 走看看