• 解决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

  • 相关阅读:
    CF 142B Tprimes
    CF 231A Team
    poj 2001 Shortest Prefixes ——字典树入门
    hdu 1039 Easier Done Than Said?
    poj 2528 Mayor's posters
    hdu 1061 Rightmost Digit
    poj 2503 Babelfish
    CF271 A. Beautiful Year
    poj 2752
    CF271 B. Prime Matrix
  • 原文地址:https://www.cnblogs.com/aobosir/p/5928663.html
Copyright © 2020-2023  润新知