PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QT Anfänger



iGEL
15-07-2001, 13:58
Moin SJW!

Danke für die schnelle Hilfe, Problem gelöst ;)
cu Johannes

iGEL
15-07-2001, 23:05
Moin!

Ich hab mir QT 2.3.1 installiert und wollte nun mit dem ersten Tutorial beginnen, welche ja praktischerweise gleich mitgeliefert werden. Also schnell mal kopiert und als hallo.cpp gespeichert. Das ich -I$QTDIR/include als weiteren Parameter für gcc benötige, hab ich dann auch noch rausgefunden, aber dann bekomme ich 100te von Fehlermeldungen, hier mal die letzten:

/tmp/ccI7tHHw.o: In function `QString::~QString(void)':
/tmp/ccI7tHHw.o(.gnu.linkonce.t._._7QString+0x26): undefined reference to `QString::shared_null'
/tmp/ccI7tHHw.o(.gnu.linkonce.t._._7QString+0x2e): undefined reference to `QString::shared_null'
/tmp/ccI7tHHw.o(.gnu.linkonce.t._._7QString+0x3d): undefined reference to `QStringData::deleteSelf(void)'
collect2: ld returned 1 exit status

Das Programm ist 100% das aus dem Tutorial:

/************************************************** **************
**
** Qt tutorial 1
**
************************************************** **************/

#include <qapplication.h>
#include <qpushbutton.h>

int main( int argc, char **argv )
{
QApplication a( argc, argv );

QPushButton hello( "Hello world!", 0 );
hello.resize( 100, 30 );

a.setMainWidget( &hello );
hello.show();
return a.exec();
}
Und compilieren wollte ich mit

gcc -I$QTDIR/include hallo.cpp

QTDIR zeigt auf /usr/lib/qt, welches wiederum ein Symlink auf /usr/lib/qt-2.3.1 ist, wo ich QT 2.3.1 kompiliert hab. Was mach ich falsch? (Sicher irgendeine kleine Gemeinheit ;))

cu Johannes

stefan77
15-07-2001, 23:21
Hi,

die Fehler Meldungen kommen nicht vom Compiler sondern vom Linker und sagen aus das er die Bibliothek bzw. die Funktion QString nicht auflösen kann.

Compilieren mal mit :
gcc -I$QTDIR/include -L$QTDIR/lib -lqt hallo.cpp

Für das Linken müssen der Pfad zu den Libs mit -L und die Libs seblst mit -l(kleines L) angegeben werden. Es genügt nicht das der LibLoader sie findet, denn man kann ja auch gegen Libs linken die dem System nicht offen bekannt sind z.B. Plugins usw.

SJW

[ 15. Juli 2001: Beitrag editiert von: SJW ]

buchi
21-09-2001, 00:24
Mmmmh, ich habe ein aehnliches Problem, allerdings bekomme ich die Fehlermeldung:

qapplication.h : Datei oder Verzeichnis nicht gefunden

Die Umgebungsvariable QTDIR zeigt aber nach /usr/lib/qt2 ; im dortigem /include ist die Datei aber vorhanden.

Etwas ratlos in die Welt blick...
Buchi

[ 21. September 2001: Beitrag editiert von: buchi ]

tentlewi
21-09-2001, 10:09
Da kann ich mich nur anschliessen... ich habe exact dieselben Fehlermeldungen : qapplication.h no such File or Directory.
Ich habe ebenfalls alles neu installiert und auch die Compileroptionen wie Oben besprochen versucht, leider kein Erfolg.

gibt es denn nicht irgendwo eine detaillierte Installationsanleitung für Qt ???

Martin Tentlewitz

stefan77
21-09-2001, 19:22
Hi

@tentlewi && @buchi

Wie schaun denn Eure compiler aufrufe aus?


g++ -o prog -lqt -L$QTDIR/lib -I$QTDIR/include *.cpp


Der g++ fügt nur includes aus /usr/include und ein bar anderen dirs für g++ automatisch dazu.

tmake oder KDevelop nutzen die setzten die Pfade automatisch.

SJW :cool:

buchi
21-09-2001, 19:30
mmmmhhh, das heisst, mein Buch fuer viel teures Westgeld ist Schrott?? :D

Hilft es, die OT includes in dieses Verzeichnis zu kopieren?? Oder ist das Bloedsinn??

Bitte hilf mir noch etwas auf die Spruenge, was ist tmake??


...immer noch ratlos in die Welt guck...
Buchi

stefan77
21-09-2001, 19:42
Hey das gute Westgeld kann auch nichts für den Autor ;), aber das gibst ja eh bald nicht mehr :(.

Ich weis nicht was dein Buch zu den optionen sagt, aber ich weis das jeder zusätzliche IncludePath mit -I, und jeder LibPath mit -L dazugefügt werden muss.

TMAKE ist ein tool welches bei Qt beiliegt
und aus einer tmakefile ein makefile erzeugt und dabei die Pade und libs »richtig« setzt.

Ich bin mit meinem Buch ganz zufrieden
Addison&Wesley KDE- und Qt-Programmierung von Lehner.
Da ist auch eine kleine tmake einführung dabei und die tutorial von Qt nutzen auch tmake.

Makefiles sind eh für Projekte mit mehreren Dateien besser, da sie richtig geschrieben alle abhänigigkeiten auflösen und die entsprechenden Dateien neu kompiliert. Was ja zu fatalen Segment defaults führen kann.

SJW

buchi
21-09-2001, 19:54
Da bin ich ja beruhigt ;) Ich verwende das gleiche Buch, es geht um das erste Beispiel bzw. Listing auf Seite 15.

Ich wuerde schon lieber weiter mit dem VI arbeiten, eigentlich sollte so etwas ja kein Problem sein.

Ok, ich werde wohl um einige Leseproben nicht umhinkommen ;)


...nicht mehr ganz so ratlos in die Welt guck...
Buchi

stefan77
21-09-2001, 20:37
Für tmake und make ist der editor egal,ich nutze am liebsten mcedit/MC.

Also bei mir läuft das Beispiel von Seite 15 ganz normal durch. Alle Pfade noch mal testen $QTDIR /usr/lib/qt2 usw. Der Compiler findet definitiv die Header dateien nicht. Das umkopieren der Dateien ist nur umgehen des Problemes aber nicht die Lösung. ;)

SJW

buchi
21-09-2001, 21:15
Schier zum verzweifeln.


Ok, dann mal ganz von vorn. Ich verwende SuSE 7.2. Die Umgebungsvariable QTDIR zeigt nach


QTDIR=/usr/lib/qt2/


zum Erstellen


g++ -o hello-qt -I$QTDIR/include -L$QTDIR/include -lqt hello-qt.cpp


Keine Chance, ich erhalte immer die selbe Meldung...vielleicht sollte ich mich mit dem Kartoffelknuelch beschaeftigen
;)

Buchi


PS unter kdevelop laesst er mich das ganze noch nicht einmal compilieren....er gibt mir einfach die Option nicht...

[ 21. September 2001: Beitrag editiert von: buchi ]

stefan77
21-09-2001, 22:13
Das Qt-Developent Paket ist installiert?

wenn ja, den Pfad 'mal direkt angeben?


#include &lt;/usr/lib/qt2/include/qapplication.h&gt;


Qt reinstallieren?

SJW

buchi
22-09-2001, 00:16
Ich habe jetzt mal ein Projekt mit Kdevelop erstellt. Gleicher Header-Datei...

Funktioniert ohne Probleme....*aus dem Fenster huepf*

Also, so richtig sehe ich nicht durch. Sollte ich vielleicht die Umgebungsvariable nach /usr/lib/qt setzen??

Ich habe ja dort gleich drei Verzeichnisse:
/usr/lib/qt
/usr/lib/qt2
/usr/lib/qt-2.3.0

wobei /usr/lib/qt2 verlinkt nach /usr/lib/qt-2.3.0 ist
Kann das eventuell das Problem sein?


Buchi

stefan77
22-09-2001, 09:09
In qt liegt eigentlich bei SuSE die qt1.4x
das mit dem link von qt2 auf qt2.3.0 passt auch. Ist bei meinem SuSE 7.1 und Mandrake 8 genauso.

Klapper doch mal die Makefiles des KDevelop Projekts nach dem QTPATH ab, oder was gibt ./configure als gefundenen QTPATH aus?

Das es mit KDevelop funktioniert ist doch schon mal ein gutes zeichen. :cool:

SJW

buchi
22-09-2001, 16:44
KDevelop greift ja auf qt zurueck, ist es eventuell moeglich, das fuer die qt2 eine extra QT-Develop* installiert sein muss??


Buchi

stefan77
22-09-2001, 18:07
Unter qt2 müssen halt nur die header Dateien auch liegen.
Willst'e qt2 oder qt1.4x Programme schreiben? Für KDE 2.0 und 2.2 wird auf jeden fall die 2.2 oder 2.3 benötigt.

Ein Rechtschreibfehler scheidet aus?

$QTDIR zeigt auf /usr/lib/qt2 dies zeigt auf qt2.3.0 und dort liegen Header. Dann stimmt eigentlich alle was stimmen muß. :confused:

Eine eigene QT-Develop Version kenne ich nicht. Ich nutzt die ganz normale.

Findet er wenigsten die qapplication.h über:


#include &lt;/usr/lib/qt2/include/qapplication.h&gt;

?

SJW

Ilja
23-09-2001, 10:24
<BLOCKQUOTE><font size="1" face="Arial,Helvetica,Geneva">Zitat:</font><HR>Original erstellt von buchi:
QTDIR=/usr/lib/qt2/

g++ -o hello-qt -I$QTDIR/include -L$QTDIR/include -lqt hello-qt.cpp
[/QB][/quote]

sollte eher heissen
g++ -o hello-qt -I$QTDIR/include -L$QTDIR/lib -lqt hello-qt.cpp

und achte darauf, dass unter $QTDIR/include auch die ganzen qt-header-dateien liegen.