2

我在我的 MFC + vtk 项目中使用了 Visual Studio 2008。我收到如下链接错误:

vtkPBFEAView.obj : 警告 LNK4217: 本地定义符号 ?DrawDC@vtkMFCWindow@@QAEXPAVCDC@@@Z (public: void __thiscall vtkMFCWindow::DrawDC(class CDC *)) 在函数“受保护:虚拟 void __thiscall CvtkPBFEAView::OnDraw(类 CDC *)" (?OnDraw@CvtkPBFEAView@@MAEXPAVCDC@@@Z)

1>vtkMDIView.obj : 警告 LNK4049: 本地定义符号 ?DrawDC@vtkMFCWindow@@QAEXPAVCDC@@@Z (public: void __thiscall vtkMFCWindow::DrawDC(class CDC *)) 导入 1>vtkPBFEAView.obj : 警告 LNK4217: 本地定义符号 ??0vtkMFCWindow@@QAE@PAVCWnd@@@Z (public: __thiscall vtkMFCWindow::vtkMFCWindow(class CWnd *)) 导入函数“public: void __thiscall vtkPBFEAViewImpl::initialize(class CWnd *)” (?initialize@vtkPBFEAViewImpl @@QAEXPAVCWnd@@@Z)

1>vtkMDIView.obj : 警告 LNK4049: 本地定义符号 ??0vtkMFCWindow@@QAE@PAVCWnd@@@Z (public: __thiscall vtkMFCWindow::vtkMFCWindow(class CWnd *)) 导入 1>vtkPBFEAView.obj : 警告 LNK4217: 本地定义符号 ??1vtkMFCWindow@@UAE@XZ (public: virtual __thiscall vtkMFCWindow::~vtkMFCWindow(void)) 导入函数“public: virtual void * __thiscall vtkMFCWindow::`标量删除析构函数'(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)

谁能解释我这个错误的原因?

提前致谢。

4

2 回答 2

1

最后我找到了问题的答案。就是 vtkMFCWindow 配置了 /MD 选项,而我的主项目配置了 /MTd 选项。因此我得到了错误。一旦我删除了 __declspec( dllexport )行并且它运行良好。谢谢您的帮助。

于 2012-07-19T06:12:01.730 回答
0

对于其他可能找到此解决方案并对其 DLL 函数不再导出以供客户端应用程序使用感到不安的人:

MSVC 的 DLL 模板提供以下样板:

#ifdef DLLNAME_EXPORTS
  #define DLLNAME_API __declspec(dllexport)
#else
  #define DLLNAME_API __declspec(dllimport)
#endif

如果您忘记在项目设置中定义 DLLNAME_EXPORTS,您将收到此消息。如果您重命名这些#defines,就会发生这种情况

于 2021-04-18T17:36:09.930 回答