LinkerFehler nach Einbinden von QtXml
LinkerFehler nach Einbinden von QtXml
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]
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]
Jeden Morgen steht ein Dummer auf,
nur warum immer ich?
nur warum immer ich?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Linker Fehler besteht weiter
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()'
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()'
Jeden Morgen steht ein Dummer auf,
nur warum immer ich?
nur warum immer ich?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Linker-Fehler lässt sich verallgemeinern
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.
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.
Jeden Morgen steht ein Dummer auf,
nur warum immer ich?
nur warum immer ich?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Test des Linkers mit Examples : Results
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?
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?
Jeden Morgen steht ein Dummer auf,
nur warum immer ich?
nur warum immer ich?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Libs übergeben?
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
Muss jetzt aber erst mal 140 km fahren und melde mich dann von zuhause,
Erst mal vielen Dank für die schnellen Antworten
- Dateianhänge
-
- linker_fehler.txt
- (3.95 KiB) 219-mal heruntergeladen
Jeden Morgen steht ein Dummer auf,
nur warum immer ich?
nur warum immer ich?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
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
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
gegen LinkerFehler - Qt4-Rebuild ist angesagt
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
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
Jeden Morgen steht ein Dummer auf,
nur warum immer ich?
nur warum immer ich?
Lösung des Problems
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.
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.
Jeden Morgen steht ein Dummer auf,
nur warum immer ich?
nur warum immer ich?
Re: Lösung des Problems
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.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 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
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
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
Jeden Morgen steht ein Dummer auf,
nur warum immer ich?
nur warum immer ich?