2014-11-12 4 views
0

Я хочу визуализировать облако точек, используя библиотеку point-cloud. Я уже включил:ошибка LNK2001 при включении «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: Nicht aufgelöstes externes Символ "" общественность: виртуальная пустота __cdecl ПКЛ :: Визуализация :: PCLVisualizer :: FPSCallback :: Execute (класс vtkObject *, неподписанные долго, пустота *)?»(Выполнить @ FPSCallback @ PCLVisualizer @ визуализации @ ПКЛ @@ 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
  • vtkComm onCore-6.1.lib
  • vtksys-6.1.lib
  • и некоторые OpenCV LIBS

может кто-нибудь сказать мне, какая библиотека отсутствует?

Заранее благодарен!

редактировать:

Я создал небольшой CPP-файл на основе кода greedy_projection.cpp. Благодаря совету drescherjm, я использовал cmake для создания проекта, и я мог бы скомпилировать его без ошибок. Затем я хотел включить материал в другой проект, но произошла такая же ошибка. Теперь я понял, что причиной ошибки является флаг \ clr. У меня есть проект Windows.Forms, поэтому он скомпилирован с \ clr. Проект greedy_projection.cpp был скомпилирован без этого флага. Есть ли способ избежать этой несовместимости pcl_visualizer.h с \ clr?

+0

Мой совет заключается в использовании CMake для создания вашего визуального проекта студии вместо обработки этого самостоятельно. – drescherjm

+0

Я хочу включить PCL в существующий проект. Вот почему я добавил зависимости вручную. Вы также рекомендуете CMake для существующих проектов, потому что я немного боюсь, что он уничтожит другие зависимости ... – Buzzy

+0

Это зависит от того, насколько сложным является существующий проект. Альтернативный вариант - создать простое тестовое приложение, используя проект, созданный CMake, который включает в себя зависимости, которые вам нужны, а затем в Visual Studio IDE скопируйте зависимости из проекта CMake в ваш проект. – drescherjm

ответ

0

Я мог бы решить проблему!

Я просто прокомментировал код внутри функции

struct FPSCallback : public vtkCommand 

поликапролактона/визуализации/pcl_visualizer.h. Тогда все составило отлично. Мне не нужен FPSCallback, поэтому это идеальное решение для запуска моего кода с поддержкой \ clr.

Спасибо drescherjm за помощь!

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 и закомментируйте строку, вызвавшую (я не знаю, почему эта линия вызывает проблемы, но я сузил его до этого и мой ВТК визуализатор все еще работает!):

//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_; 
Смежные вопросы