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

C++ 包含“时出现错误LNK2001”;pcl_visualizer.h“;,c++,dependencies,vtk,point-cloud-library,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> #包括 #包括 #包括 #包括 #包括 没有任何问题,但是当我添加 #inclu

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

#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:Nicht aufgelöstes外部符号“public:virtual void uu cdecl pcl::visualization::PCLVisualizer::FPSCallback::Execute(类vtkObject*,无符号长,void*)”(?Execute@FPSCallback@PCLVisualizer@visualization@pcl@@UEAAxpeavvvtkobject@@KPEAX@Z)"

我想少了一个图书馆,但我不知道是哪一个。这是我的程序的附加依赖项列表:

  • pcl_common_debug.lib
  • pcl_io_debug.lib
  • pcl_kdtree_debug.lib
  • pcl_功能_debug.lib
  • pcl_surface_debug.lib
  • pcl_search_debug.lib
  • pcl_visualization_debug.lib
  • vtkCommonCore-6.1.lib
  • vtksys-6.1.lib
  • 还有一些opencv库
谁能告诉我哪个图书馆丢了

提前谢谢

编辑:

我根据贪婪的_projection.cpp代码创建了一个小cpp文件。多亏了drescherjm的建议,我使用cmake创建了这个项目,我可以毫无错误地编译它。然后我想在我的另一个项目中包含这些内容,但发生了相同的错误。
现在我明白了,错误的原因是\clr标志。我有一个Windows.Forms项目,因此它是用\clr编译的。贪婪的_projection.cpp项目是在没有此标志的情况下编译的。有没有办法避免pcl_visualizer.h与\clr的这种不兼容?

我可以解决这个问题

我只是在

struct FPSCallback : public vtkCommand
pcl/visualization/pcl_visualizer.h的功能。然后一切都好了。我不需要FPSCallback,因此它是使用\clr支持运行代码的完美解决方案


谢谢drescherjm的帮助

> P>我通过将PCLVVisualActer代码放到顶部的托管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);
}
代码如下所示:

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_;
struct FPSCallback:public vtkCommand
{
静态FPSCallback*New(){return(newfpscallback);}
FPSCallback():actor(),pcl_可视化工具(),decimated(){}
//FPSCallback(constfpscallback&src):vtkCommand(),actor(src.actor),pcl_可视化工具(src.pcl_可视化工具),decimated(src.decimated){}
FPSCallback&operator=(常量FPSCallback&src){actor=src.actor;pcl_可视化工具=src.pcl_可视化工具;decimated=src.decimated;返回(*this);}
虚空
执行(vtkObject*,未签名的长事件id,void*);
vtkTextActor*actor;
pcl可视化仪*pcl_可视化仪;
布尔惨败;
};
/**\简要说明当前可视化工具的FPSCallback对象*/
VTKSmart指针更新\u fps;

我的建议是使用CMake生成Visual Studio项目,而不是自己处理。我希望在现有项目中包含PCL。这就是我手动添加依赖项的原因。您是否也建议对现有项目使用CMake,因为我有点担心它会破坏其他依赖项……这取决于先前存在的项目有多复杂。另一种选择是使用CMake生成的项目创建一个简单的测试应用程序,该项目包含您需要的依赖项,然后在Visual Studio IDE中将依赖项从CMake项目复制到您的项目中。这是一个好主意。我将使用pcl教程中的cmake数据进行尝试。我会让你知道我的努力!这种方法的一个优点是,如果您在将来保留CMake项目,如果您更新vtk、pcl。。。您可以在CMake中重新生成,并在IDE中复制更新的依赖项。
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_;