[gelöst] qt3 - Probleme beim Ausführen von make.

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
merlin159
Beiträge: 7
Registriert: 22.07.2007 16:08:20

[gelöst] qt3 - Probleme beim Ausführen von make.

Beitrag von merlin159 » 07.08.2007 16:47:40

Hallo.

Ich habe ein Problem beim Erstellen einer qt3 Anwendung. Ich möchte aus dem QT-Tutorial das erste Beispiel kompilieren.

zu finden unter: file:///usr/share/qt3/doc/html/tutorial1-01.html

#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();
}

Den Code habe ich in einem Editor eingegeben.

Dann in einer shell im selben Verzeichniss:

$ qmake -project
$ qmake qt3.pro
$ make

Dann kommen Seitenweise Fehlermeldungen....

Habe hier mal den Anfang rein kopiert....der direkt nach make kommt.

gcc -c -pipe -Wall -W -O2 -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/include/qt3 -o hello_world.o hello_world.c
In file included from /usr/include/qt3/qwindowdefs.h:43,
from /usr/include/qt3/qwidget.h:42,
from /usr/include/qt3/qdesktopwidget.h:40,
from /usr/include/qt3/qapplication.h:42,
from hello_world.c:11:
/usr/include/qt3/qobjectdefs.h:152: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘QObject’
/usr/include/qt3/qobjectdefs.h:153: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘QMetaObject’
/usr/include/qt3/qobjectdefs.h:154: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘QSignal’
/usr/include/qt3/qobjectdefs.h:155: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘QConnection’
/usr/include/qt3/qobjectdefs.h:156: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘QEvent’
/usr/include/qt3/qobjectdefs.h:158: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘QConnectionList’
/usr/include/qt3/qobjectdefs.h:159: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘QConnectionListIt’
/usr/include/qt3/qobjectdefs.h:160: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘QSignalVec’
/usr/include/qt3/qobjectdefs.h:161: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘QObjectList’
/usr/include/qt3/qobjectdefs.h:162: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘QObjectListIt’
/usr/include/qt3/qobjectdefs.h:163: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘QMemberDict’
/usr/include/qt3/qobjectdefs.h:165: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
/usr/include/qt3/qobjectdefs.h:169: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
/usr/include/qt3/qobjectdefs.h:171: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
In file included from /usr/include/qt3/qgarray.h:42,
from /usr/include/qt3/qmemarray.h:42,
from /usr/include/qt3/qcstring.h:43,
from /usr/include/qt3/qstring.h:42,
from /usr/include/qt3/qwindowdefs.h:44,
from /usr/include/qt3/qwidget.h:42,
from /usr/include/qt3/qdesktopwidget.h:40,
from /usr/include/qt3/qapplication.h:42,
from hello_world.c:11:

Am Ende der Fehlermeldung steht folgendes:

hello_world.c: In function ‘main’:
hello_world.c:20: error: ‘QApplication’ undeclared (first use in this function)
hello_world.c:20: error: (Each undeclared identifier is reported only once
hello_world.c:20: error: for each function it appears in.)
hello_world.c:20: error: expected ‘;’ before ‘a’
hello_world.c:22: error: ‘QPushButton’ undeclared (first use in this function)
hello_world.c:22: error: expected ‘;’ before ‘hello’
hello_world.c:23: error: ‘hello’ undeclared (first use in this function)
hello_world.c:25: error: ‘a’ undeclared (first use in this function)
hello_world.c:18: warning: unused parameter ‘argc’
hello_world.c:18: warning: unused parameter ‘argv’
make: *** [hello_world.o] Fehler 1

Ich habe den Eindruck, er hat die header-Dateien nicht gefunden.


Ich sollte eigentlich alles installiert haben, was man zum Übersetzen braucht.
Ein Aufruf von: $ COLUMNS=110 dpkg -l | grep qt

zeigt folgendes:

ii libavahi-qt3-1 0.6.16-3etch1 Avahi Qt3 integration library
ii libavahi-qt3-dev 0.6.16-3etch1 Development headers for the Avahi Qt3 integration library
ii libdbus-qt-1-1c2 0.62.git.20060814-2 simple interprocess messaging system (Qt-based shared libr
ii libpoppler0c2-qt 0.4.5-5.1 PDF rendering library (Qt-based shared library)
ii libqt3-headers 3.3.7-4 Qt3 header files
ii libqt3-i18n 3.3.7-4 i18n files for Qt3 library
ii libqt3-mt 3.3.7-4 Qt GUI Library (Threaded runtime version), Version 3
ii libqt3-mt-dev 3.3.7-4 Qt development files (Threaded)
ii libqthreads-12 1.6.8-6 QuickThreads library for Guile
ii pinentry-qt 0.7.2-3 Qt-based PIN or pass-phrase entry dialog for GnuPG
ii python-qt3 3.16-1.2 Qt3 bindings for Python
ii qt3-apps-dev 3.3.7-4 Qt3 Developer applications development files
ii qt3-assistant 3.3.7-4 The Qt3 assistant application
ii qt3-designer 3.3.7-4 Qt3 Designer
ii qt3-dev-tools 3.3.7-4 Qt3 development tools
ii qt3-doc 3.3.7-4 Qt3 API documentation
ii qt3-examples 3.3.7-4 Examples for Qt3
$

$ echo $PATH zeigt folgendes:
/usr/share/qt3/bin/:/usr/local/bin:/usr/bin:/bin:/usr/games

$ echo $QTDIR zeigt folgendes:
/usr/share/qt3

Kann mir da jemand helfen?

Ich habe auch versucht die folgenden Sachen unter .bash_profile im home-Verzeichnis einzutragen, hat aber leider auch nicht geholfen.

QTDIR=/usr/share/qt3
PATH=$QTDIR/bin/:$PATH
MANPATH=$QTDIR/doc/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export QTDIR
export PATH
export MANPATH
export LD_LIBRARY_PATH

Habe keine Idee, warum es nicht geht.

Verwende debian etch stable.
Zuletzt geändert von merlin159 am 14.08.2007 18:51:59, insgesamt 1-mal geändert.

Benutzeravatar
merlin159
Beiträge: 7
Registriert: 22.07.2007 16:08:20

Beitrag von merlin159 » 07.08.2007 19:16:58

Habe selbst eine Notlösung gefunden :-) , sie lautet:

$ g++ -o hello hello_world.c -Wall -I/usr/share/qt3/include -L/usr/share/qt3/lib -lqt-mt

Damit geht es erst mal und es entsteht eine ausführbare Datei: hello, die man so aufrufen kann:

./hello

Allerdings bleibt immer noch offen, warum es nicht mit:

1.) $ qmake -project
2.) $ qmake qt3.pro
3.) $ make

geht, denn so sollte man es ja eigentlich machen???? Vielleicht findet sich ja noch jemand, der hierauf eine Lösung weiß.
PS.: $ steht für: als user machen

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von GoKi » 07.08.2007 23:02:45

Dein Quelltext ist c++. Versuch mal die Datei nach hello.cpp oder hello.cc umzubenennen. Damit sollte das qmake Makefile wahrscheinlich besser zurecht kommen.
MfG GoKi
:wq

Benutzeravatar
merlin159
Beiträge: 7
Registriert: 22.07.2007 16:08:20

Beitrag von merlin159 » 08.08.2007 09:13:38

Hallo, vielen Dank für den Tipp, habe ihn sofort ausprobiert.

Ich habe die Datei hello_world.c umbenannt nach hello_world.cpp, dann:

$ qmake -project
$ qmake qt3.pro
$ make

Ergenbis: seitenweise Fehlermeldungen. Auszug vom Ende der Fehlerausgabe:
info/hello_world.c: In function ‘main’:
info/hello_world.c:20: error: ‘QApplication’ undeclared (first use in this function)
info/hello_world.c:20: error: (Each undeclared identifier is reported only once
info/hello_world.c:20: error: for each function it appears in.)

Was mich hierbei verwundert hat, war, dass dorten hello_world.c stand. Endung: .c, obwohl ich die Datei ja nach .cpp umbenannt hatte????

Habe mir desshalb die Datei: qt3.pro im Text-Editor angeschaut und siehe da, dort steht unter anderem:
# Input
SOURCES += hello_world.cpp info/hello_world.c

Habe hier das info/hello_world.c gelöscht und die Datei wieder gespeichert, so dass dorten nur steht:
# Input
SOURCES += hello_world.cpp

Dann:
$ qmake qt3.pro
$ make

und siehe da:
g++ -c -pipe -Wall -W -O2 -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/share/qt3/mkspecs/linux-g++ -I. -I. -I/usr/include/qt3 -o hello_world.o hello_world.cpp
g++ -o qt3 hello_world.o -L/usr/share/qt3/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm -lpthread

Es geht und es wird die ausführbare Datei qt3 erzeugt :D .

Das bedeutet, dass Problem ist jetzt gelöst. Aufgrund der Art und Weise, wie ich es gelöst habe, müsste man jedoch sagen, dass es sich jetzt um einen bug handelt und man diesen melden sollte, damit andere user nicht auch stundenlang mit diesem Problem kämpfen müssen. Der bug wid produziert beim Aufruf von qmake -project. Hierbei wird ein Eintrag in der Datei qt3.pro erzeugt, der seitenweise Fehlermeldungen produziert.

Seht ihr dass auch so, bezüglich bug? Oder mache ich irgend etwas falsch, so dass es kein bug ist, sondern ein Bedienungsfehler oder ein Einstellungsfehler? An wen sollte man nun diesen bug melden, sofern es wirklich einer ist?

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von GoKi » 08.08.2007 09:33:58

merlin159 hat geschrieben:Seht ihr dass auch so, bezüglich bug? Oder mache ich irgend etwas falsch, so dass es kein bug ist, sondern ein Bedienungsfehler oder ein Einstellungsfehler? An wen sollte man nun diesen bug melden, sofern es wirklich einer ist?
Es ist kein Bug im eigentlichen Sinne.
Zunächst einmal geht qmake davon aus, dass C++ Quelltext in Dateien mit z.B. der Endung cpp, cc usw. steht (C Quelltext in .c). Dies muss vom User eingehalten werden. Des Weiteren erzeugt qmake -project automatisch ein Makefile, in dem es rekursiv nach allen Quelltext-Dateien sucht. Hat man doppelte Dateien (z.T. auch noch mit falschen Endungen), so erzeugt qmake zwangsweise eine falsche *.pro Datei, was letzten Endes zu einem fehlerhaften Makefile führt.

Ich bevorzuge es daher die pro-Files von Hand zu erstellen bzw. auf jeden Fall das automatisch erzeugte File zu überprüfen. qmake ist nicht allwissend. Man muss schon bissle mitdenken. :D

btw. erzeugt qmake wirklich die Datei qt3.pro? Normalerweise richtet sich der Name nach dem Ordner. Andernfalls nutzt du eine qt3.pro die nicht durch qmake erzeugt wurde.
MfG GoKi
:wq

Benutzeravatar
merlin159
Beiträge: 7
Registriert: 22.07.2007 16:08:20

Beitrag von merlin159 » 08.08.2007 10:11:46

Hallo, ja der Ordner in dem mein Programm steht, heiß tatsächlich qt3.

Ich habe Aufgrund deiner Information einen neuen Ordner angelegt: test22, dort habe ich die Datei: hello_world.cpp rein kopiert und wieder die drei Schritte ausgeführt und es ging ohne Probleme...Also Entwarnung, kein Bug ! :D .

Ich hatte im Ordner qt3 einen Unterordner, in dem die Datei hello_world.c stand. Ich wuste nicht, dass qmake alle Ordner plus Unterordner durchsucht, dachte es arbeitet nur in dem Ordner, in dem es aufgerufen wird. Zu meiner Entschuldigung kann ich nur sagen, bin Anfänger, was das Thema Qt und auch debian angeht... Sorry.

Ok, damit kann man nun sagen, Thema vollständig gelöst. Vielen Dank für die Hilfe. :D

Antworten