Qt - VS 2008 Professional - LNK2001: Nicht aufgelötes Symbol



  • Hallo zusammen,
    ich benutze Visal Studio 2008 mit dem Qt-Add-In und habe ein Tutorial-Projekt von Addison Wesley eingeladen. Dieses wird jedoch mit dem Hinweis:

    1>finddialog.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual struct QMetaObject const * __thiscall FindDialog::metaObject(void)const " (?metaObject@FindDialog@@UBEPBUQMetaObject@@XZ)".
    1>finddialog.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void * __thiscall FindDialog::qt_metacast(char const *)" (?qt_metacast@FindDialog@@UAEPAXPBD@Z)".
    1>finddialog.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual int __thiscall FindDialog::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@FindDialog@@UAEHW4Call@QMetaObject@@HPAPAX@Z)".
    1>finddialog.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: static struct QMetaObject const FindDialog::staticMetaObject" (?staticMetaObject@FindDialog@@2UQMetaObject@@B)".
    1>finddialog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""protected: void __thiscall FindDialog::findNext(class QString const &,enum Qt::CaseSensitivity)" (?findNext@FindDialog@@IAEXABVQString@@W4CaseSensitivity@Qt@@@Z)" in Funktion ""private: void __thiscall FindDialog::findClicked(void)" (?findClicked@FindDialog@@AAEXXZ)".
    1>finddialog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""protected: void __thiscall FindDialog::findPrevious(class QString const &,enum Qt::CaseSensitivity)" (?findPrevious@FindDialog@@IAEXABVQString@@W4CaseSensitivity@Qt@@@Z)" in Funktion ""private: void __thiscall FindDialog::findClicked(void)" (?findClicked@FindDialog@@AAEXXZ)".
    1>D:\Uni\SoSe10\Masterarbeit\Code\Qt\qt-book\BOOK_Projekt\Debug\BOOK_Projekt.exe : fatal error LNK1120: 6 nicht aufgelöste externe Verweise.

    nicht kompiliert. Ein anderes Projekt, ebenfalls ein Tutorial, hat ohne Probleme geklappt. Worin der unterschied der beiden Projekte liegt, kann ich nicht genau sagen (vll. eigene Klassen definiert?).
    Soweit ich das überblicken kann liegt der Fehler nicht im Code (wobei ich bei Bedarf natürlich den noch Posten kann), sondern in der Konfiguration von Visual Studio oder dem Funktionsumfang des AddIns.
    Bin für Hilfe (zur Selbsthilfe) und jeglichen hinweis sehr dankbar.
    Grüße



  • Zusatz: Mein zu dem Tutorial gehörendes Buch hat für diesen Fall (Klassen die das Makro Q_OBJECT verwenden) den Hinweis, das mocausgeführt werden muss, was qmake jedoch eigentlich automatisch machen sollte. Visual Studio scheint das, wenn dies nun der Fehlergrund ist, jedoch nicht zu tun, oder?
    Grüße



  • FlashMuller schrieb:

    Zusatz: Mein zu dem Tutorial gehörendes Buch hat für diesen Fall (Klassen die das Makro Q_OBJECT verwenden) den Hinweis, das mocausgeführt werden muss, was qmake jedoch eigentlich automatisch machen sollte. Visual Studio scheint das, wenn dies nun der Fehlergrund ist, jedoch nicht zu tun, oder?
    Grüße

    Ja, schaut so aus.
    Der moc erzeugt Code, genauer Implementierung der virtuellen Funktionen, die Q_OBJECT vorher in deiner Klasse deklariert hat. Und wie mit allen (nicht pure) Virtuellen Funktionen: Fehlt die Implementierung knallt dir der Linker um die Ohren 🙂
    Es gibt ein VS-Addon für Qt (hab kein Windows, deshalb kann ich nix genaues sagen). Das SOLLTE dann keine Probleme bereiten...



  • Ok, geschafft 😉
    Das Problem war, dass der Compiler den Moc-Befehl zwar ausgeführt hatte, aber besagte MOC-Datei danach nicht, wie eigentlich üblich, dem Projekt hinzugefügt hat. Ich habe sie dann händisch nach dem ersten gescheiterten Kompilieren eingefügt und alles läuft geschmeidig. Nicht gerade praktisch oder elegant, aber so funktioniert es wenigstens.
    Grüße



  • Ich habe gerade ein ähnliches Problem, bin allerdings so unerfahren, dass ich deine Lösung nicht nachvollziehen kann.

    Fehler	2	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual struct QMetaObject const * __thiscall BridgeScene::metaObject(void)const " (?metaObject@BridgeScene@@UBEPBUQMetaObject@@XZ)".	bridgescene.obj	ZoomableGame
    

    Derart sind ca 60 Fehler und dann noch ein paar mit

    Fehler	64	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: static class QString __cdecl QGraphicsSvgItem::tr(char const *,char const *)" (__imp_?tr@QGraphicsSvgItem@@SA?AVQString@@PBD0@Z)" in Funktion ""public: __thiscall SvgItem::SvgItem(class QString const &,class BodyItem *,class QPointF const &,double)" (??0SvgItem@@QAE@ABVQString@@PAVBodyItem@@ABVQPointF@@N@Z)".	svgitem.obj	ZoomableGame
    

    Ich nutze VS ohne QT-Plugin. Kann mir da jemand helfen?
    Bitte halbwegs anfängerfreundlich, ich habe bisher noch kein einziges VS-Projekt hinter mir und bin daher noch sehr unwissen.
    Liebe Grüße und Danke im Voraus
    KaMe



  • Hallo,
    ein Qt-Projekt in Visual Studio Debuggen ohne das Add-In (dass nur in der Professional-Version funktioniert) geht leider gar nicht, was den Einstieg ein wenig schwerer macht. Du wirst also auf den kostenlosen, von Trolltech auch dokumentierten Compiler zurückgreifen müssen. Unter anderem http://doc.qt.nokia.com/4.6/widgets-tutorial.html ->dort steht wie das geht, wenn du alles richtig installiert hast.

    Die Möglichkeiten die du hast: Auf Visual Studio 2008 Professional (2010 ist noch nicht unterstützt) umsteigen und das Plug In nutzen (übrigens für Studenten recht günstig, 2010 gibts sogar kostenlos im Moment und soll bald auch unterstützt werden) oder qmake manuell durchführen, was ich aber nie gemacht habe und auch umständlich finde.



  • Jap, genauso habe ich es jetzt auch getan. Jetzt geht endlich alles nach 4 Tagen Rumfummeln und Frust schieben...


Log in to reply