error LNK2001: unresolved external symbol "public: virtual void __cdecl pcl::visualization::PCLVisualizer::FPSCallback::Execute(class vtkObject *,unsigned long,void *)" ([email protected]@[email protected]@[email protected]@[email protected]@[email protected])
1>C:\Users\hatea\Documents\Visual Studio 2015\Projects\PCLTester\x64\Debug\PCLTester.dll : fatal error LNK1120: 1 unresolved externals
我已經徹底用盡了所有處理此問題的途徑。我在這裏查了一下,發現了一個類似的問題/答案系列:error LNK2001 when including "pcl_visualizer.h"pcl_visualizer.h - 致命錯誤LNK1120:1個未解決的外部事件
問題是我不想註釋掉FPSCallback方法。我需要它用於我正在使用的VTK可視化工具。我確定在引用託管C++/CLI庫中的.h文件時,我只收到無法解析的外部錯誤。
#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依賴。在我的情況下,我已經鏈接了所有正確的.lib文件,並且來自pcl :: visualization的函數看起來很好定義。出於某種奇怪的原因,它在編譯時仍然在託管庫中錯過。我將我的託管.vcxproj中的依賴項複製到我的非託管.vcxproj中,以驗證它不是依賴項問題。這兩個班都設有最低等級要求,以防止這方面的衝突。兩個項目都鏈接相同的.h文件和.lib文件。
的[可能的複製什麼是未定義參考/解析的外部符號錯誤,我該如何解決? ](http://stackoverflow.co m/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix) –
我不確定你指的是哪個答案,這是重複的。到目前爲止,我沒有看到您發佈的關於託管/非託管鏈接錯誤的鏈接中的答案。爲什麼.lib定義在非託管但不受管理的靜態/類庫中工作?我也很好奇,爲什麼我能夠在我的託管C++文件中重新定義函數,而不會遇到任何編譯錯誤(我預料會發生一些阻止.lib定義工作的衝突)。 – Wurth
該帖子有幾十個答案,其中描述了未解決的外部或引用的許多原因。如果你沒有找到解決你問題的方法,那麼你的閱讀不夠。在這裏搜索LNK1120可以找到近3000條結果,在寫這個問題之前,你很少讀過這些結果。 –