Seite 1 von 1
LinkerFehler nach Einbinden von QtXml
Verfasst: 21. August 2007 14:13
von jk
Hallo
Ich versuche seit etlicher Zeit (ca. 2h) ein QDomDocument zu erstellen.
Env: Linux Suse 10.2, kdevelop 3.41 Qt 4.3.0 OS
Ich habe folgendes gemacht:
in .pro Datei
QT += xml
in .h Datei
#include <QtXml/QtXml>
aber kriege keinen Compilerlauf fertig da er meldet:
main.cpp:(.text+0x48): undefined reference to QDomDocument::QDomDocument()'
Was fehlt mir?
Kann es sein, dass der XML-Teil von Qt4 von mir nicht mit erstellt wurde und er so zwar die includes findet aber in den libs nx zum verlinken?[/list][/quote]
Verfasst: 21. August 2007 14:22
von Christian81
qmake nach ändern der pro-Datei nicht aufgerufen?
Ausserdem muss es nicht unbedingt <QtXml/QtXml> sein, ein <QtXml> reicht wenn Du es korrekt in die pro-Datei eingtragen hast.
Linker Fehler besteht weiter
Verfasst: 21. August 2007 14:31
von jk
sowohl per kdevelop als auch manuell im Projektverz aufgerufen
make distclean <ENTER>
qmake
Resultat:
niente nix immer noch der gleiche Fehler.
Inzwischen versuche ich nur noch in der main eine Instanz der Klasse
QDomDocument zu erstellen mit folgender zeile
QDomDocument doc1;
Die Antwort lautet:
main.cpp:(.text+0x48): undefined reference to `QDomDocument::QDomDocument()'
Verfasst: 21. August 2007 14:35
von Christian81
Ist in der Linker-Zeile auch QtXml zu sehen oder nicht? Einige Demos verwenden auch QtXML - lassen die sich kompilieren?
Linker-Fehler lässt sich verallgemeinern
Verfasst: 21. August 2007 14:52
von jk
habe eben gerade noch einmal was anderes versucht.
in .pro
QT += network
dann
make distclean und qmake
in (jetzt nur noch!) main.cpp
QHttpRequestHeader h1;
Resultat:
main.cpp:(.text+0x48): undefined reference to `QHttpRequestHeader::QHttpRequestHeader()'
ergo:
Beim Einbinden aller Module außer QtGui streikt der Linker.
Muss man evtl. noch Compiler resp. Linker-Flags setzen?
Da war mal was , aber ich komm geistig nicht ran.
Verfasst: 21. August 2007 14:59
von Christian81
Wie gesagt - ich kann mir nur vorstellen das qmake nicht das richtige pro-File parst und/oder QT += xml nicht interpretiert wird (auskommentiert, ...). Die examples funktionieren alle bei mir - solltest du auch mal testen.
Test des Linkers mit Examples : Results
Verfasst: 21. August 2007 15:21
von jk
habe eben gerade das RSS-Example ausprobieren wollen(!!)
gleicher Fehler
Linken der Datei rsstest (g++)
rsslisting.o: In function `RSSListing::parseXml()':
rsslisting.cpp:(.text+0x86): undefined reference to `QXmlStreamReader::atEnd() const'
und viele andere mehr
Bei mir spinnt der Linker total.
Ich versuchte es dann pur auf der Konsole
der gleiche Mist:
Er erstellt die .o files und kann dann mit den neuen libs nicht verlinken
Es ist bestimmt nur ein My, das fehlt aber welches?
Verfasst: 21. August 2007 15:24
von Christian81
Zum zweiten Mal - was für Libs werden dem Linker übergeben? Sind dort die Qt-Libs mit dabei oder nicht?
Libs übergeben?
Verfasst: 21. August 2007 15:34
von jk
Ich habe im Anhang mal die results des manuellen laufes in eine Datei gepackt.
Muss jetzt aber erst mal 140 km fahren und melde mich dann von zuhause,
Erst mal vielen Dank für die schnellen Antworten
Verfasst: 21. August 2007 15:42
von Christian81
Code: Alles auswählen
g++ -Wl,-rpath,/usr/local/Trolltech/Qt-4.3.0/lib -o src main.o rsslisting.o moc_rsslisting.o -L/usr/local/Trolltech/Qt-4.3.0/lib -lQtXml -L/usr/local/Trolltech/Qt-4.3.0/lib -pthread -L/opt/gnome/lib -pthread -lQtGui -L/usr/X11R6/lib -lpng -lSM -lICE -pthread -pthread -lXi -lXrender -lXrandr -lXfixes -lXcursor -lXinerama -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lglib-2.0 -lrt -ldl -lpthread
Da ist kein QtNetwork mit dabei. Dafür aber QtXml - so wie ich das sehe hat qmake das Makefile nicht neu erstellt als Du Qt+= xml eingefügt hast denn jetzt ist XML ja dabei...
gegen LinkerFehler - Qt4-Rebuild ist angesagt
Verfasst: 21. August 2007 19:09
von jk
Danke Christian,
bin jetzt zuhause am rel. jungfräulichen System
Suse 10.2 kdevelop 3.41 und Qt4.3.0
Ich vermute, dass der Fehler auftritt, weil Qt4 nicht mit den richtigen Optionen compiliert wurde, so dass z.B. XML und Network zwar als .h zum includen da sind, aber nicht als compilierte libs zum Linken.
ich werde heute und morgen mal einen tieferen Exkrus in das setup von Qt4 machen und herausfinden, wozu welche option beim configure ist und wie ich die XML und Network libs ansprechen kann.
Als Ex-Windows-User hatte ich angenommen, dass erst mal pro forma alles installiert wird und ich sagen muss, wass ich nicht will.
Es scheint aber anders zu sein. Ich muss wohl einige libs explizit einbinden.
Mal sehen.
Dir , Christian, erstmal vielen Dank.
Ich melde mich hier mit Ergebnissen oder weiteren Fragen.
MfG
Jens
Lösung des Problems
Verfasst: 27. August 2007 13:02
von jk
Hi Christian und alle anderen!
Das Problem hat sich wie folgt geklärt:
Unter Windows: nicht reproduzierbar.
Unter linux: Problem liegt bei kdevelop.
Temporäre (!!) Lösung:
1. Eintragen von QT += xml oder QT += network in die .pro-Datei.
2. kdevelop beenden.
3. kdevelop neustarten
4. Es lööft.
Ich habe keine Ahnung, warum oder weshalb es hier eines Neustarts von kdevelop bedarf, aber es war sowohl bei der Einbindung von network als auch bei der Einbindung von xml reproduzierbar, dass so die undefined references auf einmal defined waren und alles lief.
Vielen Dank für alle Kommentare und Hilfen.
Re: Lösung des Problems
Verfasst: 27. August 2007 14:01
von apaku
jk hat geschrieben:Hi Christian und alle anderen!
Das Problem hat sich wie folgt geklärt:
Unter Windows: nicht reproduzierbar.
Unter linux: Problem liegt bei kdevelop.
Temporäre (!!) Lösung:
1. Eintragen von QT += xml oder QT += network in die .pro-Datei.
2. kdevelop beenden.
3. kdevelop neustarten
4. Es lööft.
Ich habe keine Ahnung, warum oder weshalb es hier eines Neustarts von kdevelop bedarf, aber es war sowohl bei der Einbindung von network als auch bei der Einbindung von xml reproduzierbar, dass so die undefined references auf einmal defined waren und alles lief.
Das KDevelop die Ursache ist wuerde ich zunaechst Mal bestreiten wollen. Denn in den bisherigen Posts war nie die Rede davon, dass du in KDevelop im QMake Manager (bzw. in dessen Project Options Dialog) das Xml-Haeckchen gesetzt hast oder das du das ganze aus KDevelop heraus gemacht hast. Das Problem trat also (schliessend aus den bisherigen Postings) auch mit qmake/make auf der Kommandozeile auf, was eindeutig beweist das das Problem nicht bei KDevelop liegt.
Das KDevelop beenden und neu starten nach der Aenderung in der .pro Datei notwendig ist bezweifle ich ebenfalls. Ein Neuladen des Projektes sollte reichen. Warum das als Workaround funktioniert kann ich so nicht nachvollziehen, was KDevelop beim beended/Projekt schliessen macht ist nichts weiter als die im Speicher befindlichen geparsten .pro Dateien auf Platte rauszuschreiben und dann die .kdevelop Datei.
Schlussendlich: Wenn du die .pro Files manuell bearbeiten willst wuerde ich dir empfehlen nicht den QMake Manager sondern ein "Custom Makefile" Projekt in KDevelop zu benutzen. Der QMake Manager kontrolliert zwar die .pro Dateien auf externe Aenderungen, aber ich habe auch selbst schon feststellen muessen das das manchmal nicht ganz funktioniert (weil die KDirWatch Klasse von KDE ein paar Macken hat). Umstellen kannst du dein Projekt ganz einfach indem du mit nem Editor in der .kdevelop Datei den Inhalt des Elements "projectmanagement" von KDevTrollProject auf KDevCustomProject aenderst.
Re: Kdevelop wars wohl
Verfasst: 29. August 2007 23:32
von jk
Hi apaku,
ich werde morgen das Ganze noch einmal einem Test unterziehen. So ganz entbehren Deine Ausführungen der Logik nämlich nicht.
Ich hatte auch Probleme damit, das Ganze als Lösung zu betrachten und habe es der Einfachheit halber als Workaround benannt.
Ich werde einmal das Wechselspiel der lokalen .pro und der .pro-Datei im src-Ordner der kdevelop Datei untersuchen. kdevelop 3.4.1 raucht dabei zwar gerne ab aber das macht erst mal nix. Das Eintragen von "QT+=xml" in der .pro-Datei im Projektordner scheint aber echt nix zu bewirken.
ALs es lief hatte ich baer im letzten Moment vor dem Abrauchen von kdevelop noch in der src.pro die bewusste Zeile eingefügt. Kann sein, dass da der Unterschied liegt.
Wie gesagt, morgen ist Probetag mit frischen Testprojekten.
Vielleicht war ich zu voreilig beim Posten, Sorry.
Dank Dir für Dein Posting, ich war nur 3 Tage wegen akuter Kindererziehungsprobleme verhindert. Ich melde mich.
Gruß
jens