Thursday, April 1, 2010

Qt & VS 2005/2008

Using Visual Studio for QT development sometimes occurs link errors connected with moc files.
Code example:

Error 1 error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall cDirectXWidget::metaObject(void)const " (?metaObject@cDirectXWidget@@UBEPBUQMetaObject@@XZ) mainQT.obj
Error 2 error LNK2001: unresolved external symbol "public: virtual void * __thiscall cDirectXWidget::qt_metacast(char const *)" (?qt_metacast@cDirectXWidget@@UAEPAXPBD@Z) mainQT.obj
Error 3 error LNK2001: unresolved external symbol "public: virtual int __thiscall cDirectXWidget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@cDirectXWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z) mainQT.obj


To solve them sure that you have installed qt integrator for visual studio. If not you may download in here. It helps.

If integrator is installed then:
  • delete all moc_*.cpp files
  • exclude all headers with Q_OBJECT macro from project
  • add all excluded headers to project
  • click "Build" and pray. :)
Also you may have such error like:

Error 2 error LNK2019: unresolved external symbol "int __cdecl qInitResources_App(void)" (?qInitResources_App@@YAHXZ) referenced in function main main.obj


It means that you didn't link to you project auto generated file named like qrc_*.cpp. In this file all functions like qInitResource are defined.

No comments:

Post a Comment