PDA

View Full Version : Compilation error wen using VTK in QT4.4



richardander
9th February 2009, 03:31
Hi,

I got the following compilation error when I compile my project in Visual Studio 2008. The same code is compiled successfully in VS2003.net.


\tmp\moc\moc_QVTKWidget.cpp(56) : error C2491: 'QVTKWidget::staticMetaObject' : definition of dllimport static data member not allowed

Could anyone let me know what the problem is?

Thank you!

richardander
9th February 2009, 03:35
The QVTKWidget.h / .cpp are all from VTK4.4.

Here is the complete list of warnings and errors.





1>moc_QVTKWidget.cpp
1>.\tmp\moc\moc_QVTKWidget.cpp(56) : warning C4273: 'staticMetaObject' : inconsistent dll linkage
1> c:\pmri\vpd\src\visualization\tmp\moc\../../QVTKWidget.h(62) : see previous definition of 'public: static QMetaObject const QVTKWidget::staticMetaObject'
1>.\tmp\moc\moc_QVTKWidget.cpp(56) : error C2491: 'QVTKWidget::staticMetaObject' : definition of dllimport static data member not allowed
1>.\tmp\moc\moc_QVTKWidget.cpp(62) : warning C4273: 'QVTKWidget::metaObject' : inconsistent dll linkage
1> c:\pmri\vpd\src\visualization\tmp\moc\../../QVTKWidget.h(62) : see previous definition of 'metaObject'
1>.\tmp\moc\moc_QVTKWidget.cpp(67) : warning C4273: 'QVTKWidget::qt_metacast' : inconsistent dll linkage
1> c:\pmri\vpd\src\visualization\tmp\moc\../../QVTKWidget.h(62) : see previous definition of 'qt_metacast'
1>.\tmp\moc\moc_QVTKWidget.cpp(75) : warning C4273: 'QVTKWidget::qt_metacall' : inconsistent dll linkage
1> c:\pmri\vpd\src\visualization\tmp\moc\../../QVTKWidget.h(62) : see previous definition of 'qt_metacall'
1>.\tmp\moc\moc_QVTKWidget.cpp(124) : warning C4273: 'QVTKWidget::mouseEvent' : inconsistent dll linkage
1> c:\pmri\vpd\src\visualization\tmp\moc\../../QVTKWidget.h(144) : see previous definition of 'mouseEvent'
1>.\tmp\moc\moc_QVTKWidget.cpp(131) : warning C4273: 'QVTKWidget::cachedImageDirty' : inconsistent dll linkage
1> c:\pmri\vpd\src\visualization\tmp\moc\../../QVTKWidget.h(149) : see previous definition of 'cachedImageDirty'
1>.\tmp\moc\moc_QVTKWidget.cpp(137) : warning C4273: 'QVTKWidget::cachedImageClean' : inconsistent dll linkage
1> c:\pmri\vpd\src\visualization\tmp\moc\../../QVTKWidget.h(153) : see previous definition of 'cachedImageClean'
1>.\tmp\moc\moc_QVTKWidget.cpp(160) : warning C4273: 'staticMetaObject' : inconsistent dll linkage
1> c:\pmri\vpd\src\visualization\tmp\moc\../../QVTKWidget.h(257) : see previous definition of 'public: static QMetaObject const QVTKInteractor::staticMetaObject'
1>.\tmp\moc\moc_QVTKWidget.cpp(160) : error C2491: 'QVTKInteractor::staticMetaObject' : definition of dllimport static data member not allowed
1>.\tmp\moc\moc_QVTKWidget.cpp(166) : warning C4273: 'QVTKInteractor::metaObject' : inconsistent dll linkage
1> c:\pmri\vpd\src\visualization\tmp\moc\../../QVTKWidget.h(257) : see previous definition of 'metaObject'
1>.\tmp\moc\moc_QVTKWidget.cpp(171) : warning C4273: 'QVTKInteractor::qt_metacast' : inconsistent dll linkage
1> c:\pmri\vpd\src\visualization\tmp\moc\../../QVTKWidget.h(257) : see previous definition of 'qt_metacast'
1>.\tmp\moc\moc_QVTKWidget.cpp(181) : warning C4273: 'QVTKInteractor::qt_metacall' : inconsistent dll linkage
1> c:\pmri\vpd\src\visualization\tmp\moc\../../QVTKWidget.h(257) : see previous definition of 'qt_metacall'


Thank you!

jpn
9th February 2009, 12:47
The QVTKWidget.h / .cpp are all from VTK4.4.
Did you include the sources to your project? If so, you might want to remove the export macro from QVTKWidget. The export macro is there because it was supposed to be used as a library.

richardander
9th February 2009, 23:49
You hit the exact point! It works. But, how do you know the existence of "export macro from QVTKWidget" from the warning message?

Though the compilation passes, the linking didn't pass with error messages below associated with vtkRendering.lib and vtkCommon.lib. With the same setting, the compilation works in VS2003.net.
BTW, for the library used in my application, do I need to compile them in VS2008 again if the my application is compiled in VS2008?

Thank you!





1>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??$?6DU?$char_traits@D@std@@V?$allocator@D@1@@std @@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@A AV10@ABV?$basic_string@DU?$char_traits@D@std@@V?$a llocator@D@2@@0@@Z) already defined in Cryptlib.lib(dll.obj)
1>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl std::getline<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_istream<char,struct std::char_traits<char> > &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)" (??$getline@DU?$char_traits@D@std@@V?$allocator@D@ 2@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std @@@0@AAV10@AAV?$basic_string@DU?$char_traits@D@std @@V?$allocator@D@2@@0@@Z) already defined in Cryptlib.lib(dll.obj)
1>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl std::operator>><char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_istream<char,struct std::char_traits<char> > &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)" (??$?5DU?$char_traits@D@std@@V?$allocator@D@1@@std @@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@A AV10@AAV?$basic_string@DU?$char_traits@D@std@@V?$a llocator@D@2@@0@@Z) already defined in Cryptlib.lib(dll.obj)
1>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl std::operator+<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char const *)" (??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std @@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$al locator@D@2@@0@ABV10@PBD@Z) already defined in Cryptlib.lib(dll.obj)
1>Visualization.lib(MRAImageData.obj) : error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char)" (??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ost ream@DU?$char_traits@D@std@@@0@AAV10@D@Z) already defined in msvcprtd.lib(MSVCP90D.dll)
1>dcmdata.lib(dcobject.obj) : error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char)" (??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ost ream@DU?$char_traits@D@std@@@0@AAV10@D@Z) already defined in msvcprtd.lib(MSVCP90D.dll)
1>dcmdata.lib(dcvrat.obj) : error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char)" (??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ost ream@DU?$char_traits@D@std@@@0@AAV10@D@Z) already defined in msvcprtd.lib(MSVCP90D.dll)
1>dcmdata.lib(dcdict.obj) : error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char)" (??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ost ream@DU?$char_traits@D@std@@@0@AAV10@D@Z) already defined in msvcprtd.lib(MSVCP90D.dll)
1>dcmdata.lib(dcbytstr.obj) : error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char)" (??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ost ream@DU?$char_traits@D@std@@@0@AAV10@D@Z) already defined in msvcprtd.lib(MSVCP90D.dll)
1>vtkCommon.lib(vtkOStreamWrapper.obj) : error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char)" (??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ost ream@DU?$char_traits@D@std@@@0@AAV10@D@Z) already defined in msvcprtd.lib(MSVCP90D.dll)
1>vtkCommon.lib(vtkLargeInteger.obj) : error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char)" (??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ost ream@DU?$char_traits@D@std@@@0@AAV10@D@Z) already defined in msvcprtd.lib(MSVCP90D.dll)
1>vtkRendering.lib(vtkRenderWindowInteractor.obj) : error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char)" (??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ost ream@DU?$char_traits@D@std@@@0@AAV10@D@Z) already defined in msvcprtd.lib(MSVCP90D.dll)
1>vtkRendering.lib(vtkInteractorObserver.obj) : error LNK2005: "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char)" (??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ost ream@DU?$char_traits@D@std@@@0@AAV10@D@Z) already defined in msvcprtd.lib(MSVCP90D.dll)