Fehler beim Compilieren
-
Hallo,
wenn ich versuche, unter Ubuntu ein Qt-Projekt zu compilieren erhalte ich nach der Eingabe des Befehls "make" folgende Fehlermeldung:
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o main.o main.cpp
main.cpp:1:24: Fehler: qapplication: No such file or directory
main.cpp:2:23: Fehler: qpushbutton: No such file or directory
main.cpp: In function »int main(int, char**)«:
main.cpp:7: Fehler: »QApplication« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp:7: Fehler: expected;' before »a« main.cpp:9: Fehler: »QPushButton« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:9: Fehler: expected
;' before »hello«
main.cpp:10: Fehler: »hello« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp:12: Fehler: »a« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp: At global scope:
main.cpp:5: Warnung: unbenutzter Parameter »argc«
main.cpp:5: Warnung: unbenutzter Parameter »argv«
make: *** [main.o] Fehler 1Die Project-Datei und das Makefile wurden erfolgreich mit "qmake -project" bzw. "qmake" erstellt, also sollte der Compiler eigentlich wissen, welche Pakete er mit einbinden muss, und wo er diese findet.
Danke für eure Hilfe!
-
Ist das dein Projekt?
Ich hab zumindest mal keinen Header "qapplication", nur "qapplication.h".
Vielleicht liegt es da dran.Sonst zeig mal etwas mehr Code bzw sag was das für ein Programm ist.
-
Das Projekt besteht nur aus folgender Datei:
#include <qapplication.h> #include <qpushbutton.h> int main(int argc,char **argv) { QApplication app(argc,argv); // Dieses Objekt braucht man fuer jedes GUI-Programm. QPushButton *hello = new QPushButton("Hello I'm Qt!",0); // Ein Knopf (noch ohne Funktion) hello->resize(100,30); // Groesse von Hand bestimmen hello->show(); // Sichtbar-machen des Haupt-Widget app.setMainWidget(hello); // Jedes GUI-Programm braucht ein Haupt-Widget return app.exec(); // Hier beginnt die Event-Schleife }
Kopiert von
http://www-alt.physik.uni-muenchen.de/kurs/Computing/ckursoo_05/node10.html
Dies verursacht dann folgende Fehlermeldung:
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o main.o main.cpp
main.cpp:1:26: Fehler: qapplication.h: No such file or directory
main.cpp:2:25: Fehler: qpushbutton.h: No such file or directory
main.cpp: In function »int main(int, char**)«:
main.cpp:5: Fehler: »QApplication« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp:5: Fehler: expected;' before »app« main.cpp:7: Fehler: »QPushButton« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:7: Fehler: »hello« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:7: Fehler: expected type-specifier before »QPushButton« main.cpp:7: Fehler: expected
;' before »QPushButton«
main.cpp:10: Fehler: »app« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp: At global scope:
main.cpp:3: Warnung: unbenutzter Parameter »argc«
main.cpp:3: Warnung: unbenutzter Parameter »argv«
make: *** [main.o] Fehler 1
-
Wie man nur unschwer erkennen kann ist das für QT3.
g++ -I /usr/qt/3/include/ -g -o main main.cpp -L /usr/qt/3/lib/ -lqt
Funktioniert so bei mir.Und von was für einem Makefile hast du geredete?!
-
Ok, das war ein Qt3-Programm.
Mit folgendem Qt4-Programm
#include <QtGui> int main(int argc, char **argv) { QApplication app(argc, argv); QWidget *window = new QWidget; window->setWindowTitle(„Qt4-Example“); QLabel *label = new QLabel(„Hello World!“); label->setAlignment(Qt::AlignCenter); QPushButton *button = new QPushButton(„&Exit“); QObject::connect(button, SIGNAL(clicked()), &app, SLOT(quit())); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(label); layout->addWidget(button); window->setLayout(layout); window->show(); return app.exec(); }
erhalte ich folgende Ausgabe (nach "qmake -project", "qmake" und "make":
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o main.o main.cpp
main.cpp:1:17: Fehler: QtGui: No such file or directory
main.cpp:8:25: Warnung: fehlendes abschließendes Zeichen "
main.cpp:8: Fehler: fehlendes abschließendes Zeichen "
main.cpp:10:29: Warnung: fehlendes abschließendes Zeichen "
main.cpp:10: Fehler: fehlendes abschließendes Zeichen "
main.cpp:13:40: Warnung: fehlendes abschließendes Zeichen "
main.cpp:13: Fehler: fehlendes abschließendes Zeichen "
main.cpp: In function »int main(int, char**)«:
main.cpp:5: Fehler: »QApplication« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp:5: Fehler: expected;' before »app« main.cpp:7: Fehler: »QWidget« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:7: Fehler: »window« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:7: Fehler: expected type-specifier before »QWidget« main.cpp:7: Fehler: expected
;' before »QWidget«
main.cpp:10: Fehler: »QLabel« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp:10: Fehler: »label« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp:10: Fehler: expected type-specifier before »QLabel«
main.cpp:13: Fehler: »QPushButton« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp:13: Fehler: »button« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp:13: Fehler: expected type-specifier before »QPushButton«
main.cpp:13: Fehler: expected;' before »QPushButton« main.cpp:16: Fehler: »QVBoxLayout« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:16: Fehler: »layout« wurde in diesem Gültigkeitsbereich nicht definiert main.cpp:16: Fehler: expected type-specifier before »QVBoxLayout« main.cpp:16: Fehler: expected
;' before »QVBoxLayout«
main.cpp:23: Fehler: »app« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp: At global scope:
main.cpp:3: Warnung: unbenutzter Parameter »argc«
main.cpp:3: Warnung: unbenutzter Parameter »argv«
make: *** [main.o] Fehler 1
-
Hast du denn die Datei "/usr/include/qt4/QtGui/QtGui"?
Evtl fehlt ein bestimmtes (Entwickler-)Paket bei dir?Zudem sind deine Anführungszeichen kaputt.
-
Das Verzeichnis /usr/include/qt4 existiert nicht.
Installiert sind folgende Pakete (Ausgabe bei Suche nach "qt"):
libavahi-qt3-1
libqt3-mt
libqt4-dbus
libqt4-desigener
libqt4-network
libqt4-opengl
libqt4-qt3support
libqt4-script
libqt4-sql
libqt4-sql-mysql
libqt4-sql-sqlite
libqt4-svg
libqt4-webkit
libqt4-xml
libqtcore4
libqtgui4
qt4-dev-tools-dbg
qt4-qmake
-
Dann fehlen dir die Entwicklerpakete. Such mal nach qt4 Paketen mit einem "dev" oder "devel" im namen. So wie libqt4-dev.
Die werden halt nicht mitinstalliert, da man sie gewöhnlich nur braucht, wenn man etwas selber übersetzt, was aber für die meisten überflüssig ist, da alles bereits in Paketform vorliegt.
-
Danke für deine Hilfe und deinen geduldigen Umgang mit mir.
Das Paket "libqt4-dev" und alle davon abhängigen Pakete hatten noch gefehlt.
(Und ich dachte, mit "qt4-dev-tools-dbg" hätte ich schon alles)Die kaputten Anführungszeichen kommen daher, dass ich den Quellcode aus Wikipedia kopiert hatte.
Und jetzt geht's los mit Qt4 lernen...