2012-06-29 4 views
2

Я использую visual studio 2008 в своем проекте MFC + vtk. Там я получаю сообщение об ошибке, связывающую, как показано ниже:Неразрешенный внешний символ vftable C++

vtkPBFEAView.obj: предупреждение LNK4217: локально определенный символ DrawDC @ vtkMFCWindow @@ QAEXPAVCDC @@@ Z (общественности: недействительным __thiscall vtkMFCWindow :: DrawDC (класс CDC *)) импортирован в функции "защищены: виртуальная пустота __thiscall CvtkPBFEAView :: OnDraw (класс CDC *)" (OnDraw @ CvtkPBFEAView @@ MAEXPAVCDC @@@ Z)

1> vtkMDIView.obj: предупреждение LNK4049: локально определенный символ ? DrawDC @ vtkMFCWindow @@ QAEXPAVCDC @@@ ZApp(): void __thiscall vtkMFCWindow :: DrawDC (класс CDC *)) импортировано 1> vtkPBFEAView.obj: предупреждение LNK4217: локально определенный символ 0vtkMFCWindow @@ QAE @ PAVCWnd @@ @Z (public: __thiscall vtkMFCWindow :: vtkMFCWindow (класс CWnd *)), импортированный в Функция "общественности: недействительным __thiscall vtkPBFEAViewImpl :: инициализировать (класс CWnd *)"

1> vtkMDIView.obj (инициализация @ vtkPBFEAViewImpl @@ QAEXPAVCWnd @@@ Z?): предупреждение LNK4049: локально определенный символ ?? 0vtkMFCWindow @@ QAE @ PAVCWnd @@@ Z (public: __thiscall vtkMFCWindow :: vtkMFCWindow (класс CWnd *)) импортировано 1> vtkPBFEAView.obj: предупреждение LNK4217: локально определенный символ? 1vtkMFCWindow @@ UAE @ XZ (public: virtual __thiscall vtkMFCWindow: : ~ vtkMFCWindow (аннулируются)) импортирован в функции "общественность: виртуальная пустота * __thiscall vtkMFCWindow ::` скалярная удаление деструктор '(без знака целое)"(?? _ GvtkMFCWindow @@ UAEPAXI @ Z)

1> vtkMDIView.obj: предупреждение LNK4217: локально определенный символ? 1vtkMFCWindow @@ UAE @ XZ (public: virtual __thiscall vtkMFCWindow :: ~ vtkMFCWindow (void)) Импортирован в функции "общественность: недействительный __thiscall vtkMDIViewImpl :: adjust_contours (интермедиат, двойной, двойной)" (adjust_contours @ vtkMDIViewImpl @@ QAEXHNN @ Z)

1> vtkMFCWindow.obj: ошибка LNK2019: неразрешенный внешний символ " _ declspec (dllimport) const vtkMFCWindow :: `vftable '" ( _imp _ ?? _ 7vtkMFCWindow @@ 6B @), на который ссылается функция "public: __thiscall vtkMFCWindow :: vtkMFCWindow (класс CWnd *)" (? 0vtkMFCWindow @@ QAE @ PAVCWnd @@@ Z)

Может ли кто-нибудь объяснить мне причину этой ошибки?

Заранее спасибо.

+0

Существует аналогичный вопрос [здесь] (http://vtk.1045678.n5.nabble.com/Build-from-GIT-Master-Linker-errors-td5429952.html), посмотрите, поможет ли он вам. – sashoalm

+0

Спасибо за ссылку @satuon. Я создаю vtk с dll-файлами сейчас, но у него есть ранее устаревшие библиотеки. Возможно, это проблема, поэтому я пытаюсь построить vtk со статическими libs, которые я нашел dificult для сборки ранее. Есть ли у вас какие-либо предложения? Еще раз спасибо. – gishara

+0

В ссылке, которую я дал, было решение строить с использованием общих библиотек вместо статических библиотек (они включаются BUILD_SHARED_LIBS). Ты сделал это? – sashoalm

ответ

1

Наконец-то я нашел ответ на эту проблему. Это было то, что vtkMFCWindow был настроен с параметром/MD, и мой основной проект был настроен с опцией/MTd. И поэтому я получил ошибку. Как только я удалил строки __declspec (dllexport), он работал хорошо. Спасибо за помощь.

Смежные вопросы