pcl_visualizer.h - фатальная ошибка LNK1120: 1 неразрешенная внешность

error LNK2001: unresolved external symbol "public: virtual void __cdecl pcl::visualization::PCLVisualizer::FPSCallback::Execute(class vtkObject *,unsigned long,void *)" (?Execute@FPSCallback@PCLVisualizer@visualization@pcl@@UEAAXPEAVvtkObject@@KPEAX@Z)
1>C:\Users\hatea\Documents\Visual Studio 2015\Projects\PCLTester\x64\Debug\PCLTester.dll : fatal error LNK1120: 1 unresolved externals

Я полностью исчерпал все возможности решения этой проблемы. Я проверил здесь, и я нашел похожую серию вопросов / ответов:ошибка LNK2001 при включении "pcl_visualizer.h"

Проблема в том, что я не хочу комментировать метод FPSCallback. Мне это нужно для визуализатора VTK, который я использую. Я определил, что получаю неразрешенную внешнюю ошибку, только когда ссылаюсь на файл .h в управляемой библиотеке C ++ / CLI.

#pragma once
#pragma unmanaged
#include <pcl/visualization/pcl_visualizer.h>
#pragma managed

using namespace System;

namespace PCLTesterCLI 
{
    public ref class PCLTesterCLI
    {
    public:
        PCLTesterCLI();
        virtual ~PCLTesterCLI();
    };
}

Если я сделаю то же самое в неуправляемой библиотеке Win32, библиотека будет успешно построена.

#pragma once
#include <pcl/visualization/pcl_visualizer.h>

class PCLTester
{
public:
    PCLTester();
    virtual ~PCLTester();
};

Вот сегмент из pcl_visualizer.h:

    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_;

Вот сегмент из pcl_visualizer.cpp:

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);
}

Есть идеи, почему структура и функция-член конфликтуют в управляемой среде?

Причина, по которой мой вопрос уникален, заключается в том, что ошибка в моих символах не была результатом того, что я сделал: например, объявление функции без ее определения, наличие синтаксической ошибки, которая приводит к неправильному определению функции, или исключение зависимости .lib из Linker-> Input. В моем случае у меня есть все правильные файлы .lib, и функция из pcl :: visualization, кажется, хорошо определена. По какой-то странной причине он все еще отсутствует во время компиляции в управляемой библиотеке. Я скопировал свои зависимости из моего управляемого .vcxproj в мой неуправляемый .vcxproj, чтобы убедиться, что это не проблема с зависимостями. Оба класса настроены с минимальными требованиями к классу для предотвращения конфликтов в этом отношении. Оба проекта имеют одинаковые файлы .h и .lib.

Ответы на вопрос(1)

Ваш ответ на вопрос