Seite 1 von 1

QtAI mit Qt4 compilieren

Verfasst: 4. Juli 2006 09:10
von Delryn
Hallo!

ich hab da ein paar Probleme mit der Compilierung, in der Datei "aibase.h" werden einige, sehr alte Qt-header eingebunden, z.B. "qpopmenu.h".

Bei meiner Qt4 Installation ist keine solche Datei dabei, auch nicht im Qt3Support-Folder.
Wenn ich die Datei Qt3Support/Q3PopupMenu benutze, bekomme ich neue Compilierfehler.


Weiß jemand wie sich das beheben lässt oder ob es eine andere Möglichkeit gibt, mit Qt Graphen zu plotten?

Thanks :D

Verfasst: 4. Juli 2006 12:31
von Christian81
Du brauchst natürlich eine Version die für Qt4 gemacht ist...

Evtl. http://qwt.sourceforge.net/ ?

Verfasst: 4. Juli 2006 14:08
von Delryn
Ich bekomm es nicht hin, ich bekomm es einfach nicht hin!


Seit 5 Stunden versuche ich jetzt, irgendeine Plottersoftware für Qt zu compilieren.

Entweder sind die Sourcen so alt, das es gar nicht mehr geht, oder es sind kommerzielle varianten, oder die Anleitung ist so dürftig (sorry Uwe!)
das man es nicht kapiert. Irgendwas klappt immer nicht :evil:

Ich bin wahrlich kein DAU und programmiere auch schon länger, aber die Installation von qwt ist eine Zumutung.


Kann mir irgendjemand, der qwt schonmal compiliert hat, eine detaillierte Anleitung für Windows UND Linux geben?!


Selbst wenn ich mit dem SlickEdit versuche aus den qwt-Sourcen (gemoc'ced habe ich) eine Lib zu erstellen, tauchen letztendlich Linkerfehler auf:

Debug/moc_qwt_dial.o(.text+0x14c): In function `ZN7QwtDial11qt_metacastEPKc':
D:/qwt/generated/moc_qwt_dial.cpp:72: undefined reference to `QwtAbstractSlider::qt_metacast(char const*)'
Debug/moc_qwt_dial.o(.text+0x17a): In function `ZN7QwtDial11qt_metacallEN11QMetaObject4CallEiPPv':
D:/qwt/generated/moc_qwt_dial.cpp:77: undefined reference to `QwtAbstractSlider::qt_metacall(QMetaObject::Call, int, void**)'
Debug/moc_qwt_dial.o(.rdata+0x0): In function `ZSt17__verify_groupingPKcjRKSs':
d:/programme/dev-cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/locale_facets.tcc:2493: undefined reference to `QwtAbstractSlider::staticMetaObject'
Debug/moc_qwt_knob.o(.text+0x16e): In function `ZN7QwtKnob11qt_metacastEPKc':
D:/qwt/generated/moc_qwt_knob.cpp:67: undefined reference to `QwtAbstractSlider::qt_metacast(char const*)'
Debug/moc_qwt_knob.o(.text+0x19c): In function `ZN7QwtKnob11qt_metacallEN11QMetaObject4CallEiPPv':
D:/qwt/generated/moc_qwt_knob.cpp:72: undefined reference to `QwtAbstractSlider::qt_metacall(QMetaObject::Call, int, void**)'
Debug/moc_qwt_knob.o(.rdata+0x0): In function `ZSt17__verify_groupingPKcjRKSs':
d:/programme/dev-cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/locale_facets.tcc:2493: undefined reference to `QwtAbstractSlider::staticMetaObject'
Debug/moc_qwt_slider.o(.text+0x16e): In function `ZN9QwtSlider11qt_metacastEPKc':
D:/qwt/generated/moc_qwt_slider.cpp:76: undefined reference to `QwtAbstractSlider::qt_metacast(char const*)'
Debug/moc_qwt_slider.o(.text+0x19c): In function `ZN9QwtSlider11qt_metacallEN11QMetaObject4CallEiPPv':
D:/qwt/generated/moc_qwt_slider.cpp:81: undefined reference to `QwtAbstractSlider::qt_metacall(QMetaObject::Call, int, void**)'
Debug/moc_qwt_slider.o(.rdata+0x0): In function `ZSt17__verify_groupingPKcjRKSs':
d:/programme/dev-cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/locale_facets.tcc:2493: undefined reference to `QwtAbstractSlider::staticMetaObject'
Debug/moc_qwt_wheel.o(.text+0x14c): In function `ZN8QwtWheel11qt_metacastEPKc':
D:/qwt/generated/moc_qwt_wheel.cpp:59: undefined reference to `QwtAbstractSlider::qt_metacast(char const*)'
Debug/moc_qwt_wheel.o(.text+0x17a): In function `ZN8QwtWheel11qt_metacallEN11QMetaObject4CallEiPPv':
D:/qwt/generated/moc_qwt_wheel.cpp:64: undefined reference to `QwtAbstractSlider::qt_metacall(QMetaObject::Call, int, void**)'
Debug/moc_qwt_wheel.o(.rdata+0x0): In function `ZSt17__verify_groupingPKcjRKSs':
d:/programme/dev-cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/locale_facets.tcc:2493: undefined reference to `QwtAbstractSlider::staticMetaObject'
Debug/qwt_abstract_slider.o(.text+0x184): In function `ZN17QwtAbstractSliderC2EN2Qt11OrientationEP7QWidget':
D:/qwt/src/qwt_abstract_slider.cpp:51: undefined reference to `vtable for QwtAbstractSlider'
Debug/qwt_abstract_slider.o(.text+0x190):D:/qwt/src/qwt_abstract_slider.cpp:51: undefined reference to `vtable for QwtAbstractSlider'
Debug/qwt_abstract_slider.o(.text+0x19c):D:/qwt/src/qwt_abstract_slider.cpp:51: undefined reference to `vtable for QwtAbstractSlider'
Debug/qwt_abstract_slider.o(.text+0x2ee): In function `ZN17QwtAbstractSliderC1EN2Qt11OrientationEP7QWidget':
D:/qwt/src/qwt_abstract_slider.cpp:51: undefined reference to `vtable for QwtAbstractSlider'
Debug/qwt_abstract_slider.o(.text+0x2fa):D:/qwt/src/qwt_abstract_slider.cpp:51: undefined reference to `vtable for QwtAbstractSlider'
Debug/qwt_abstract_slider.o(.text+0x306):D:/qwt/src/qwt_abstract_slider.cpp:51: more undefined references to `vtable for QwtAbstractSlider' follow
Debug/qwt_abstract_slider.o(.text+0x9de): In function `ZN17QwtAbstractSlider15mousePressEventEP11QMouseEvent':
D:/qwt/src/qwt_abstract_slider.cpp:170: undefined reference to `QwtAbstractSlider::sliderPressed()'
Debug/qwt_abstract_slider.o(.text+0xa5a): In function `ZN17QwtAbstractSlider14buttonReleasedEv':
D:/qwt/src/qwt_abstract_slider.cpp:185: undefined reference to `QwtAbstractSlider::valueChanged(double)'
Debug/qwt_abstract_slider.o(.text+0xba9): In function `ZN17QwtAbstractSlider17mouseReleaseEventEP11QMouseEvent':
D:/qwt/src/qwt_abstract_slider.cpp:220: undefined reference to `QwtAbstractSlider::sliderReleased()'
Debug/qwt_abstract_slider.o(.text+0xe71): In function `ZN17QwtAbstractSlider14mouseMoveEventEP11QMouseEvent':
D:/qwt/src/qwt_abstract_slider.cpp:319: undefined reference to `QwtAbstractSlider::sliderMoved(double)'
Debug/qwt_abstract_slider.o(.text+0xf84): In function `ZN17QwtAbstractSlider10wheelEventEP11QWheelEvent':
D:/qwt/src/qwt_abstract_slider.cpp:344: undefined reference to `QwtAbstractSlider::sliderMoved(double)'
Debug/qwt_abstract_slider.o(.text+0x10d9): In function `ZN17QwtAbstractSlider13keyPressEventEP9QKeyEvent':
D:/qwt/src/qwt_abstract_slider.cpp:397: undefined reference to `QwtAbstractSlider::sliderMoved(double)'
Debug/qwt_abstract_slider.o(.text+0x1365): In function `ZN17QwtAbstractSlider11valueChangeEv':
D:/qwt/src/qwt_abstract_slider.cpp:472: undefined reference to `QwtAbstractSlider::valueChanged(double)'
Debug/qwt_dial.o(.text+0x33f7): In function `ZN7QwtDial13keyPressEventEP9QKeyEvent':
D:/qwt/src/qwt_dial.cpp:1207: undefined reference to `QwtAbstractSlider::sliderMoved(double)'
collect2: ld returned 1 exit status
*** Errors occurred during this build ***
Man möge mir meine Wortwahl verzeihen aber ich hab da jetzt fast einen ganzen Arbeitsttag reingesteckt...

Verfasst: 4. Juli 2006 14:58
von FlorianBecker
Meine Anleitung für Linux:

cvs -d:pserver:anonymous@qwt.cvs.sourceforge.net:/cvsroot/qwt co qwt

cd qwt

qmake-qt4

make

fertig!!!

Ich wette, es ist unter Windows nicht wirklich anders.

Verfasst: 4. Juli 2006 15:21
von Delryn
Irgendwie schon, es gibt ein Problem mit den Pfaden.

Unter Linux läuft es jetzt, ich muss es leider auch unter Windows zum laufen bekommen.


Folgendes habe ich jetzt unter Windows gemacht:
  • qwt-20060130.zip entpackt
  • qmake qwt.pro eingegeben
  • make eingegeben

Jetzt gibt's irgendwie ein Problem mit den Pfaden in den generierten Files, hier mal ein Screenshot:

Bild

Es scheint so, als ob es Probleme mit den '/' gibt. Manuelles ändern hat nichts gebracht (also src\ oder src/ oder src\\ oder src//).

Hast du eine Idee ?

Verfasst: 4. Juli 2006 15:39
von Christian81
Könnt ihr nichtmal im Forum suchen? Das wurde schon hundermal gefragt - du hast cygwin / msys (oder genauer sh.exe) im Pfad!

Verfasst: 4. Juli 2006 15:59
von Delryn
Ich hab gesucht, allerdings wusste ich halt nicht wonach genau. (Hab auch google usw. bemüht).

Danke :!:

Verfasst: 4. Juli 2006 16:01
von Christian81
Is nur so dass die Frage mindestens einmal die Woche kommt ;)

Verfasst: 5. Juli 2006 07:45
von Uwe
Delryn hat geschrieben:Man möge mir meine Wortwahl verzeihen aber ich hab da jetzt fast einen ganzen Arbeitsttag reingesteckt...
Das kannst Du wieder gut machen, wenn Du schreibst, welche Informationen Dir in der Installationsanleitung weiter geholfen hätten.

Uwe

Verfasst: 5. Juli 2006 10:55
von Delryn
Uwe hat geschrieben:
Delryn hat geschrieben:Man möge mir meine Wortwahl verzeihen aber ich hab da jetzt fast einen ganzen Arbeitsttag reingesteckt...
Das kannst Du wieder gut machen, wenn Du schreibst, welche Informationen Dir in der Installationsanleitung weiter geholfen hätten.

Uwe


Hallo Uwe,

es wäre vielleicht nicht verkehrt, wenn die Anleitung ausführlicher beschrieben wäre, bzw. wenn man eine mögliche Variante näher erläutert. Der Linuxabschnitt ist soweit top, jeder der sich mit Linux ein bißchen auskennt bekommt das dann auch hin.

Unter Windows ist es verwirrend, das es verschiedene Möglichkeiten gibt.
Z.B. WIN32 und WIN32 mit Qt 4.0.
Laut der Anleitung hätte ich, da ich Qt 4 benutze, deine Sourcen dann mit dem "MinGW compiler from the MSYS shell" machen müssen, was mir gar nichts gesagt hat, obwohl die normale WIN32 Variante auch ausgereicht hätte.

Unter WIN32 sieht es dann so aus, als ob "nmake" Pflicht wäre, dass es auch mit "make" (oder anderen) geht, wird nicht erwähnt.


Vielleicht stell ich mich auch einfach nur dumm an, aber ich hab jedes Mal Probleme, Projekte von anderen (hauptsächlich welche die für Linux geschrieben wurden) zu übersetzen. Das dauert dann immer Stunden und ich muss mir danach selbst eine Anleitung schreiben, damit es beim nächsten Mal schneller geht.



Vielleicht würde hier sowas helfen wie

1.) Vor der Installation dafür sorgen, dass die Qt-Programme qmake, moc usw. sowie make von der Konsole/Shell aus aufgerufen werden können, falls dies nicht bereits der Fall ist

2.) Mit einer Konsole/Shell in das neu entstandene Verzeichnis wechseln und qmake qwt.pro eingeben, ein Makefile ensteht

3.) make eingeben

4.) Um die Beispiele zu compilieren anschließend in das Verzeichnis examples wechseln.

- Dort qmake examples.pro eingeben
- make eingeben

5.) Damit die neu enstandene Lib gefunden werden kann muss
unter Linux bla bla , unter Windows Umgebungsvariable Pfad bla bla bla"
Halt richtig Step-by-Step.

Ansonsten möchte ich natürlich nicht bloß nörgeln, sondern dir sehr dafür danken, dass du dir die Mühe machst und vielen anderen Nutzern solch eine sinnvolle Software zur Verfügung stellst. Danke :!: :!:

Verfasst: 5. Juli 2006 11:06
von Christian81
Delryn hat geschrieben: Unter Windows ist es verwirrend, das es verschiedene Möglichkeiten gibt.
Z.B. WIN32 und WIN32 mit Qt 4.0.
Laut der Anleitung hätte ich, da ich Qt 4 benutze, deine Sourcen dann mit dem "MinGW compiler from the MSYS shell" machen müssen, was mir gar nichts gesagt hat, obwohl die normale WIN32 Variante auch ausgereicht hätte.
Die MSys-Shell darf auf keinen Fall benutzt werden wenn qmake mit im Spiel ist. Wird ./configure genommen dann ist sie Pflicht
Delryn hat geschrieben: Unter WIN32 sieht es dann so aus, als ob "nmake" Pflicht wäre, dass es auch mit "make" (oder anderen) geht, wird nicht erwähnt.
Auch hier wieder
nmake -> Visual Studio
make -> MSys/cygwin/ggf. auch Borland
mingw32-make -> Mingw
Delryn hat geschrieben:

1.) Vor der Installation dafür sorgen, dass die Qt-Programme qmake, moc usw. sowie make von der Konsole/Shell aus aufgerufen werden können, falls dies nicht bereits der Fall ist

Also entweder ich weiss was ich tue oder ich lasse es bleiben - wenn ich mit Qt und qmake arbeiten will sollte ich sowas wissen. Sonst muss man noch anfangen zu erklären was der Explorer ist...

Verfasst: 5. Juli 2006 11:09
von Delryn
Klar, irgendwo ist die Grenze.

Nur haben die meisten OpenSource-Projekte den Hang, eine zu technische Installationsanleitung mitzuliefern, die zu knapp gehalten ist.

Verfasst: 6. Juli 2006 00:07
von Uwe
Christian81 hat geschrieben:Die MSys-Shell darf auf keinen Fall benutzt werden wenn qmake mit im Spiel ist.
Mit "export MINGW_IN_SHELL=1" sollte das eigentlich auch in der MSYS-Shell gehen.

Uwe