我在我的MFC + vtk项目中使用visual studio 2008。我收到如下链接错误:
vtkPBFEAView.obj:警告LNK4217:本地定义的符号?DrawDC @ vtkMFCWindow @@ QAEXPAVCDC @@@ Z(公共:void __thiscall vtkMFCWindow :: DrawDC(类CDC *))在函数中导入“protected:virtual void __thiscall CvtkPBFEAView: :OnDraw(类CDC *)“(?OnDraw @ CvtkPBFEAView @@ MAEXPAVCDC @@@ Z)
1> vtkMDIView.obj:警告LNK4049:本地定义的符号?DrawDC @ vtkMFCWindow @@ QAEXPAVCDC @@@ Z(public:void __thiscall vtkMFCWindow :: DrawDC(class CDC *))import 1> vtkPBFEAView.obj:警告LNK4217:本地定义的符号?? 0vtkMFCWindow @@ QAE @ PAVCWnd @@@ Z(公共:__thiscall vtkMFCWindow :: vtkMFCWindow(类CWnd *))在函数“public:void __thiscall vtkPBFEAViewImpl :: initialize”中导入(CWnd *类)“(?initialize @ vtkPBFEAViewImpl @@ QAEXPAVCWnd @@@ Z)
1> vtkMDIView.obj:警告LNK4049:本地定义的符号?? 0vtkMFCWindow @@ QAE @ PAVCWnd @@@ Z(公共:__thiscall vtkMFCWindow :: vtkMFCWindow(类CWnd *))已导入 1> vtkPBFEAView.obj:警告LNK4217:本地定义的符号?? 1vtkMFCWindow @@ UAE @ XZ(public:virtual __thiscall vtkMFCWindow :: ~vtkMFCWindow(void))导入函数“public:virtual void * __thiscall vtkMFCWindow ::`scalar deletion析构函数'(unsigned int)“(?? _ GvtkMFCWindow @@ UAEPAXI @ Z)
1> vtkMDIView.obj:警告LNK4217:本地定义的符号?? 1vtkMFCWindow @@ UAE @ XZ(public:virtual __thiscall vtkMFCWindow :: ~vtkMFCWindow(void))在函数“public:void __thiscall vtkMDIViewImpl :: adjust_contours”中导入int,double,double)“(?adjust_contours @ vtkMDIViewImpl @@ QAEXHNN @ Z)
1> vtkMFCWindow.obj:错误LNK2019:未解析的外部符号“_ declspec(dllimport)const vtkMFCWindow ::`vftable'”( _imp _ ?? _ 7vtkMFCWindow @@ 6B @)在函数中引用“ public:__thiscall vtkMFCWindow :: vtkMFCWindow(class CWnd *)“(?? 0vtkMFCWindow @@ QAE @ PAVCWnd @@@ Z)
有人能解释一下这个错误的原因吗?
提前致谢。
答案 0 :(得分:1)
最后我找到了问题的答案。这是vtkMFCWindow配置了/ MD选项,我的主项目配置了/ MTd选项。因此我得到了错误。一旦我删除了 __ declspec(dllexport)行,它就运行良好。 谢谢你的帮助。
答案 1 :(得分:0)
对于可能找到此解决方案并对其 DLL 函数不再导出以供客户端应用程序使用而感到不安的其他任何人:
MSVC 的 DLL 模板提供了以下样板:
#ifdef DLLNAME_EXPORTS
#define DLLNAME_API __declspec(dllexport)
#else
#define DLLNAME_API __declspec(dllimport)
#endif
如果您忘记在项目设置中定义 DLLNAME_EXPORTS,您将收到此消息。如果您重命名这些#defines
,就会发生这种情况