Kompilieren eines einfachen Testprogramms
-
Hi !
So jetzt nicht lachen, ja ?? Also ich hab mir ein Buch über QT Programmierung besorgt. Dann hab ich ein kleines QT Programm geschrieben, dass einfach ein Fenster aufpoppen lassen soll, wodrin dann so ein Hallo Welt Mist steht.
Naja, jedenfalls hab ich erstmal folgendes gemacht:1. apt-get alle dev pakete von qt und kde installiert.
2. Pfade in /etc/ld.so.conf eingetragen -> ldconfig ausgeführt.Okay, ich denke doch, dass das genügen sollte. Steht zumindest so in dem Buch.
Dann hab ich das Prog aus emm Buch zum testen abgetippt, und wie darin aufgeführt, den Befehlt für den g++ ausgeführt. Allerdings schreibt der mir dann folgenden Fehler in die shell:tom@debian:~/eigene dateien/Programmieren/qt-kde Programmierung$ g++ -o prog1 -l$/usr/include/qt3 -lqt prog1.cpp prog1.cpp:10:26: qapplication.h: No such file or directory prog1.cpp:11:20: qlabel.h: No such file or directory ....noch mehr Fehler, die von den beiden abhängen...
Ich weiss, das ist echt ne tolle noob Frage, aber ich weiss im Moment nicht was ich machen soll.
mfg
tom
-
also was -l$ als Parameter ist, weiß ich nicht, du möchtest dafür doch lieber -I /usr/include/qt3 benutzen
-
Hi !
Danke für die Antwort. Ich hab das $-Zeichen jetzt mal weggelassen. Allerdings kommt jetzt folgendes:
tom@debian:~/eigene dateien/Programmieren/qt-kde Programmierung$ g++ -o prog1 -I /usr/include/qt3 -lqt prog1.cpp In file included from /usr/include/qt3/qobjectdefs.h:42, 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 prog1.cpp:10: /usr/include/qt3/qglobal.h:740:21: qconfig.h: No such file or directory /usr/include/qt3/qglobal.h:750:22: qmodules.h: No such file or directory
Kann mir jemand mal erklären, was ich eigentlich installieren muss, damit der Salat hier funktioniert ?
Ich hab ein Debian System und will eigentlich nur ein Programm schreiben können, das auf qt Basis ein Fenster öffnen kann. Ich habe die Kde-dev Pakete und die QT-dev Pakete installiert, und es klappt nichts.
Den Meldungen des Compilers nach, muss ich scheinbar nochwas nachinstallieren, aber was, das weiss ich nicht !?
Wäre froh, wenn mir jemand hier weiterhelfen könnte.
mfg
tom
-
Hm, mach doch mal ein find qconfig.h vom root-Verzeichnis aus, oder locate qconfig.h falls du das draufhast. Vielleicht liegen die Dateien ja nur doof.
-
Hi nochmal!
Ich hab jetzt zusätzlich den Pfad /usr/include/qt in die ld.so.conf geschrieben und ldconfig ausgeführt.
Ich geb euch mal den Quellcode:/* Just open a simple qt-Window */ #include <qapplication.h> #include <qlabel.h> int main(int argc, char **argv) { QApplication app(argc , argv); QLabel *qLabel = new QLabel("<H1>Nettes Proggie<H1>", 0); qLabel->show(); app.setMainWidget(qLabel); return app.exec(); } //finish
Wenn ich das Programm jetzt kompiliere erhalte ich folgende Compilerausgabe:
tom@debian:~/eigene dateien/Programmieren/qt-kde Programmierung$ g++ -o prog1 -I /usr/include/qt -lqt prog1.cpp /tmp/ccb1woQZ.o(.text+0x23): In function `main': : undefined reference to `QApplication::QApplication[in-charge](int&, char**)' /tmp/ccb1woQZ.o(.text+0x57): In function `main': : undefined reference to `QString::QString[in-charge](char const*)' /tmp/ccb1woQZ.o(.text+0x66): In function `main': : undefined reference to `QLabel::QLabel[in-charge](QString const&, QWidget*, char const*, unsigned)' /tmp/ccb1woQZ.o(.text+0x120): In function `main': : undefined reference to `QApplication::setMainWidget(QWidget*)' /tmp/ccb1woQZ.o(.text+0x12f): In function `main': : undefined reference to `QApplication::exec()' /tmp/ccb1woQZ.o(.text+0x140): In function `main': : undefined reference to `QApplication::~QApplication [in-charge]()' /tmp/ccb1woQZ.o(.text+0x160): In function `main': : undefined reference to `QApplication::~QApplication [in-charge]()' /tmp/ccb1woQZ.o(.gnu.linkonce.t._ZN7QStringD1Ev+0x21): In function `QString::~QString [in-charge]()': : undefined reference to `QString::shared_null' /tmp/ccb1woQZ.o(.gnu.linkonce.t._ZN7QStringD1Ev+0x29): In function `QString::~QString [in-charge]()': : undefined reference to `QString::shared_null' /tmp/ccb1woQZ.o(.gnu.linkonce.t._ZN7QStringD1Ev+0x3a): In function `QString::~QString [in-charge]()': : undefined reference to `QStringData::deleteSelf()' collect2: ld returned 1 exit status
Ehrlich gesagt, kann ich mit den Compilermeldungen nicht so viel anfangen. Was bedeutet bspw. [in-charge] ?
Über Hilfe würde ich mich sehr freuen.
mfg
tom
-
Also ich weiss ja nicht, ob du das jetzt bewusst alles per Hand machen willst, aber schau dir doch einfach qmake mal an. Meiner Meinung nach vereinfacht das die ganze Geschichte enorm und du musst dich kaum um was kümmern.
-
Na, also bewusst per Hand will ich nix machen. Ich wills eigentlich total einfach haben.
QMake funktioniert bei mir irgendwie nicht und ne man-page ist auf meinem System nicht installiert !!??
Warum ? Tja, da fragst man am besten den Linux Geist. Ich hab auch keine Ahnung was für ein Paket ich installieren muss, wenn ich die Manpage lesen möchte.Ist es eigentlich nicht besser die die "Orginaldateien" direkt von TrollTech und KDE zu installieren ?
mfg
tom
-
Okay, ich hab den LinuxGeist auf der TrollTech-Site gefunden.
Naja, wie dem auch sei, ein Fehler löst den anderen ab:
debian:/home/tom/eigene dateien/Programmieren/qt-kde Programmierung# qmake -project debian:/home/tom/eigene dateien/Programmieren/qt-kde Programmierung# qmake debian:/home/tom/eigene dateien/Programmieren/qt-kde Programmierung# ls Makefile prog1.cpp prog1.cpp~ qt-kde Programmierung.pro debian:/home/tom/eigene dateien/Programmieren/qt-kde Programmierung# make g++ -c -pipe -Wall -W -O2 -DQT_NO_DEBUG -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/share/qt3/include -o prog1.o prog1.cpp prog1.cpp:2:26: qapplication.h: No such file or directory prog1.cpp:3:20: qlabel.h: No such file or directory prog1.cpp: In function `int main(int, char**)': prog1.cpp:6: `QApplication' undeclared (first use this function) prog1.cpp:6: (Each undeclared identifier is reported only once for each function it appears in.) prog1.cpp:6: syntax error before `(' token prog1.cpp:7: `QLabel' undeclared (first use this function) prog1.cpp:7: `qLabel' undeclared (first use this function) prog1.cpp:7: syntax error before `(' token prog1.cpp:9: `app' undeclared (first use this function) prog1.cpp:5: warning: unused parameter `int argc' prog1.cpp:5: warning: unused parameter `char**argv' make: *** [prog1.o] Error 1
Das ist ja irgendwie wieder dasselbe.
mfg
tom
-
So, jetzt hab ich mal die Header Dateien von /usr/include/qt3 nach /usr/share/qt3/include kopiert. Jetzt erhalte ich wieder folgenden Fehler
tom@debian:~/eigene dateien/Programmieren/qt-kde Programmierung$ ls Makefile prog1.cpp prog1.cpp~ qt-kde Programmierung.pro tom@debian:~/eigene dateien/Programmieren/qt-kde Programmierung$ make prog1.cpp g++ -c -pipe -Wall -W -O2 -DQT_NO_DEBUG -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/share/qt3/include -o prog1.o prog1.cpp In file included from /usr/share/qt3/include/qobjectdefs.h:42, from /usr/share/qt3/include/qwindowdefs.h:43, from /usr/share/qt3/include/qwidget.h:42, from /usr/share/qt3/include/qdesktopwidget.h:40, from /usr/share/qt3/include/qapplication.h:42, from prog1.cpp:2: /usr/share/qt3/include/qglobal.h:740:21: qconfig.h: No such file or directory /usr/share/qt3/include/qglobal.h:750:22: qmodules.h: No such file or directory make: *** [prog1.o] Error 1
Mein Gott ich werd noch wahnsinnig. Das kann doch nicht sein, dass man so ein bescheuertes AssiProg nicht ans laufen bekommt, nur weil die Sachen auf dem System beschissen installiert sind.
Vielleicht noch ne Info:
QT3 Bibliotheken liegen jetzt bei mir in den Verzeichnissen:
/usr/include/qt3/
/usr/share/qt3/include/und die qt2 Bibs liegen in
/usr/inlcude/qtIn meiner ld.so.conf sind diese Pfade eingetragen und trotzdem erhalte ich ständig NUR Fehler.
Also ich bin langsam echt am verzweifeln.
mfg
tom
-
Huhu !!!
:D:D Soderle ich weiss jetzt was es war :
Also, immer wenn sowas wie :
undefined reference to `QApplication::QApplication[in-charge](int&, char**)'
vom Compiler gemeldet wird, dann lieg es daran, dass zwei verschiedene qt-Versionen auf dem System installiert sind. Bspw. qt2 & qt3. Jetzt weiss der Compiler natürlich nicht was er benutzen soll.
Die Lösung ist: Man muss eine der beiden Bibs einfach löschen. Dann geht's!!!
yuhuuu!!!!
mfg
tom