[英]error LNK2001 when including “pcl_visualizer.h”
我想使用點雲庫可視化一個點雲。 我已經包括:
#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:虛擬void __cdecl pcl :: visualization :: PCLVisualizer :: FPSCallback :: Execute(class vtkObject *,unsigned long,void *)“”(?Execute @ FPSCallback @ PCLVisualizer @ visualization @ pcl @@ UEAAXPEAVvtkObject @@ KPEAX @ Z)“
我認為缺少一個圖書館,但我不知道是哪個圖書館。 這是帶有我程序附加依賴項的列表:
誰能告訴我缺少哪個圖書館?
提前致謝!
編輯:
我根據greedy_projection.cpp代碼創建了一個小cpp文件。 感謝drescherjm的建議,我使用cmake創建了項目,並且可以毫無錯誤地對其進行編譯。 然后,我想將這些內容包括在我的其他項目中,但是發生了相同的錯誤。 現在我弄清楚了,錯誤的原因是\\ clr標志。 我有一個Windows.Forms項目,因此它是用\\ clr編譯的。 greedy_projection.cpp項目的編譯沒有此標志。 有什么方法可以避免pcl_visualizer.h與\\ clr不兼容?
我可以解決問題!
我只是在里面注釋了代碼
struct FPSCallback : public vtkCommand
pcl / visualization / pcl_visualizer.h的功能。 然后一切都編譯良好。 我不需要FPSCallback,因此它是使用\\ clr支持運行代碼的理想解決方案。
感謝drescherjm的幫助!
我通過將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 visualizer仍然有效!):
//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_;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.