Linken nicht möglich...qmake spinnt

Verschiedenes zu Qt
Antworten
avaurus
Beiträge: 2
Registriert: 2. Dezember 2004 21:39
Kontaktdaten:

Linken nicht möglich...qmake spinnt

Beitrag von avaurus »

hi,
ich möchte mich endlich mal mit Qt-Programmierung auseinandersetzen und als ich heute die Website von trolltech.com besuchte, viel mir eine Werbung in's Auge, auf welcher ein Ebook vorgestellt wurde...kostenlos. Na, klar, ich hab da sofort runtergeladen und mir gefile bereits das Vorwort.

Ich habe also das erste Beispiel geschnappt und es im Editor eingegeben:

Code: Alles auswählen

#include <qapplication.h>
#include <qlabel.h>

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	QLabel *label = new QLabel("Hello Qt!", 0);
	app.setMainWidget(label);
	label->show();
	return app.exec(); 
	return 0;
}
Simpel, was ? :) Dachte ich auch, aber nun kommts. Laut Buch sollte ich danach also einfach:

Code: Alles auswählen

qmake -project
ausführen, gefolgt von ...

Code: Alles auswählen

qmake
...ich erhalte von diesem Vorgang dann ein "Makefile". Ich starte "make" und bekomme folgenden Error:

Code: Alles auswählen

avaurus@localhost:~/qt$ make
g++  -o qt hello.o    -L/usr/X11R6/lib -lXext -lX11 -lm -lpthread
hello.o(.text+0x1a): In function `main':
: undefined reference to `QApplication::QApplication[in-charge](int&, char**)'
hello.o(.text+0x3c): In function `main':
: undefined reference to `QString::QString[in-charge](char const*)'
hello.o(.text+0x4e): In function `main':
: undefined reference to `QLabel::QLabel[in-charge](QString const&, QWidget*, char const*, unsigned)'
hello.o(.text+0x67): In function `main':
: undefined reference to `QString::shared_null'
hello.o(.text+0x72): In function `main':
: undefined reference to `QStringData::deleteSelf()'
hello.o(.text+0x7f): In function `main':
: undefined reference to `QApplication::setMainWidget(QWidget*)'
hello.o(.text+0x92): In function `main':
: undefined reference to `QApplication::exec()'
hello.o(.text+0x9d): In function `main':
: undefined reference to `QApplication::~QApplication [in-charge]()'
hello.o(.text+0xc0): In function `main':
: undefined reference to `QString::shared_null'
hello.o(.text+0xcb): In function `main':
: undefined reference to `QStringData::deleteSelf()'
hello.o(.text+0xf5): In function `main':
: undefined reference to `QApplication::~QApplication [in-charge]()'
hello.o(.gnu.linkonce.r._ZTV6QGList+0xc): undefined reference to `QGList::clear()'
hello.o(.gnu.linkonce.r._ZTV6QGList+0x10): undefined reference to `QGList::~QGList [in-charge]()'
hello.o(.gnu.linkonce.r._ZTV6QGList+0x14): undefined reference to `QGList::~QGList [in-charge deleting]()'
hello.o(.gnu.linkonce.r._ZTV6QGList+0x18): undefined reference to `QPtrCollection::newItem(void*)'
hello.o(.gnu.linkonce.r._ZTV6QGList+0x20): undefined reference to `QGList::compareItems(void*, void*)'
hello.o(.gnu.linkonce.r._ZTV6QGList+0x24): undefined reference to `QGList::read(QDataStream&, void*&)'
hello.o(.gnu.linkonce.r._ZTV6QGList+0x28): undefined reference to `QGList::write(QDataStream&, void*) const'
hello.o(.gnu.linkonce.r._ZTI6QGList+0x8): undefined reference to `typeinfo for QPtrCollection'
collect2: ld returned 1 exit status
make: *** [qt] Error 1
Ich suchte also die FAQ von Trolltech.com auf und fand heraus, dass ich folgendes in der *.pro Datei hinzufügen sollte:

Code: Alles auswählen

CONFIG += thread
Ich habe danach qmake erneut ausgeführt und erneut "make" gestartet, doch das half auch nicht.

Hier mal meine qt.pro:

Code: Alles auswählen

######################################################################
# Automatically generated by qmake (1.07a) Sun Dec 5 21:57:12 2004
######################################################################

TEMPLATE = app
CONFIG -= moc
INCLUDEPATH += .

# Input
SOURCES += hello.cpp
generiert von qmake.

So wie es im Buch steht, finde ich es auch im Tutorial von Trolltech wieder, bringt mir also Null :).

Ich denke mal, dass ich hier richtig mit meinem Anliegen bin und bedanke mich schonmal vorab für die evtl. gegebene Hilfe :).

Mfg, avaurus.

//Nachtrag\\

Code: Alles auswählen

g++ -o hello hello.cpp -Wall -I/usr/lib/qt-3.3.2/include -L/usr/lib/qt-3.3.2/lib -lqt-mt
Damit funzt es :/ wieso wird sowas nicht einfach im Buch beschrieben? Das war nun zu einfach :/...naja, egal...dann halt ohne qmake.

Danke trotzdem
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Normalerweise ist Qt (also in Linux) so integriert, das man nicht mit qmake arbeitet. Allerdings wenn du mit qmake arbeiten willst, das qmake HowTo in der Doku gibt die Beispiele dazu.
Desweiteren ist zu sagen, ein Programmierer weiss meistens, wie er eine Datei bauen muss, damit Sie geht. Wenn du also ein Qt Programm hast solltest du wissen, das es von der Qt Lib (qt-mt weil threaded) abhängig ist.
Ab der 4er Qt Version werden es verschiedene kleiner Libs sein, da wird das Problem erheblicher sein nehme ich an.
Aber wenn du sonst Hilfe brauchst, bist du hier genau richtig und Qt ist schon sehr einfach zu bedienen.
Soweit, viel Spaß mit deiner Neuentdeckung. :D
Zuletzt geändert von FlorianBecker am 4. Oktober 2005 10:59, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

FlorianBecker hat geschrieben:Normalerweise ist Qt (also in Linux) so integriert, das man nicht mit qmake arbeitet.
Naja, es ist für kleine Projekte wesentlich einfacher mit qmake zu arbeiten als automake/autoconf zu benutzen. Die qt-Library wird auch mittels qmake erzeugt.
Und der einzigste 'Fehler' hier ist, dass sein Verzeichnis 'qt' heisst. Deshalb nimmt qmake an, dass versucht wird die Qt-Bibliothek zu erzeugen und ein '-lqt-mt' hier nicht sinnvoll wäre (da ich sie ja erzeugen möchte).
Nenn dein Verzeichnis einfach nicht 'qt' sondern evtl. 'qt-tutorial' oder wie auch immer und es klappt wie beschrieben :)
qmake könnte sich allerdings darüber beschweren und nicht stillschweigend '-lqt-mt' weglassen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
avaurus
Beiträge: 2
Registriert: 2. Dezember 2004 21:39
Kontaktdaten:

Beitrag von avaurus »

Tatsache...! "qmake" störte der Ordnername...den ich ja qt genannt hatte...aber wieso sagt es denn nichts? :). Aber nungut, das ist nun egal, werde halt andere Namen wählen, aber danke für den Hinweis.
denilzon
Beiträge: 2
Registriert: 19. Januar 2005 17:06
Wohnort: Aachen

Beitrag von denilzon »

Auch ich habe diese Problem mit dem Linker, was sich aber nicht durch den Aufruf von:

Code: Alles auswählen

g++ -o hello hello.cpp -Wall -I/usr/lib/qt-3.3.2/include -L/usr/lib/qt-3.3.2/lib -lqt-mt 
ungehen läßt.(Zitat beispielhaft. Habe natürlich meine Dateinamen und Verzeichnisstruktur benutzt)
Desweiteren ist auch sehr ungewöhnlich, daß es eine lange Zeit problemlos lief, aber nachdem ich eine neue class in einer externen .h Datei hinzufügte und make all ausführte, dieses Problem auftrat.
make clean und das Wiederherstellen des code halfen nicht. Auch beinhaltet mein Ordnername nicht die Buchstaben q und t geschweige denn die Kombination qt.

Ich bitte um dringende Hilfe, denn ich muß in einer Woche den Quelltext abliefern.

Und ja ich bin ein Neuling, darum habt Nachsicht mit mir.

Danke schonmal in voraus.
~Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn~
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Was für Probleme hast Du denn genau? Welche Fehlermeldungen werden ausgeben?
Mache am besten einen neuen Thread auf wenn es nichts mit -lqt / -lqt-mt zu tun hat.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten