包含“pcl_visualizer.h”时出现错误LNK2001

时间:2014-11-12 14:41:49

标签: c++ dependencies vtk point-cloud-library

我想使用点云库可视化点云。我已经包括:

#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/features/normal_3d.h>
#include <pcl/surface/gp3.h>

没有任何问题,但是当我添加

#include <pcl/visualization/pcl_visualizer.h>

到我的代码我收到LNK2001错误。

  

Fehler 51错误LNK2001:Nichtaufgelöstesexternes符号“”public:virtual void __cdecl pcl :: visualization :: PCLVisualizer :: FPSCallback :: Execute(class vtkObject *,unsigned long,void *)“(?执行@ FPSCallback @ PCLVisualizer @ @可视PCL @@ UEAAXPEAVvtkObject @@ @ KPEAX Z)“

我认为有一个图书馆遗失,但我无法弄清楚哪一个。这是包含我的程序的附加依赖项的列表:

  • pcl_common_debug.lib
  • pcl_io_debug.lib
  • pcl_kdtree_debug.lib
  • pcl_features_debug.lib
  • pcl_surface_debug.lib
  • pcl_search_debug.lib
  • pcl_visualization_debug.lib
  • vtkCommonCore-6.1.lib
  • vtksys-6.1.lib
  • 和一些opencv libs

谁能告诉我哪个库丢失了?

提前致谢!

编辑:

我根据greedy_projection.cpp代码创建了一个小cpp文件。感谢drescherjm的建议,我使用cmake创建项目,我可以编译它没有错误。然后我想把这些东西包含在我的其他项目中但是发生了同样的错误。 现在我想通了,错误的原因是\ clr标志。我有一个Windows.Forms项目,所以用\ clr编译。编译的greedy_projection.cpp项目没有此标志。有没有办法避免pcl_visualizer.h与\ clr?

的这种不兼容性

2 个答案:

答案 0 :(得分:0)

我可以解决这个问题!

我刚评论了

中的代码
struct FPSCallback : public vtkCommand

pcl / visualization / pcl_visualizer.h的功能。然后一切都编好了。我不需要FPSCallback,因此对于我来说,使用\ clr支持运行我的代码是一个完美的解决方案。

感谢drescherjm的帮助!!

答案 1 :(得分:0)

我通过将pcl_visualizer代码放在顶部的托管c ++代码中解决了这个问题。我还必须添加一个标题:

#include <vtkTextActor.h>

void
pcl::visualization::PCLVisualizer::FPSCallback::Execute(vtkObject* caller, unsigned long, void*)
{
    vtkRenderer *ren = reinterpret_cast<vtkRenderer *> (caller);
    float fps = 1.0f / static_cast<float> (ren->GetLastRenderTimeInSeconds());
    char buf[128];
    sprintf(buf, "%.1f FPS", fps);
    actor->SetInput(buf);
}

另一个选择是进入pcl_visualizer.h并注释掉有问题的行(我不知道为什么这行导致了问题,但我把它缩小到这个,我的vtk可视化工具仍然可以工作!):<​​/ p >

  //FPSCallback (const FPSCallback& src) : vtkCommand (), actor (src.actor), pcl_visualizer (src.pcl_visualizer), decimated (src.decimated) {}

然后代码如下:

struct FPSCallback : public vtkCommand
{
  static FPSCallback *New () { return (new FPSCallback); }

  FPSCallback () : actor (), pcl_visualizer (), decimated () {}
  //FPSCallback (const FPSCallback& src) : vtkCommand (), actor (src.actor), pcl_visualizer (src.pcl_visualizer), decimated (src.decimated) {}
  FPSCallback& operator = (const FPSCallback& src) { actor = src.actor; pcl_visualizer = src.pcl_visualizer; decimated = src.decimated; return (*this); }

  virtual void 
  Execute (vtkObject*, unsigned long event_id, void*);

  vtkTextActor *actor;
  PCLVisualizer* pcl_visualizer;
  bool decimated;
};

/** \brief The FPSCallback object for the current visualizer. */
vtkSmartPointer<FPSCallback> update_fps_;