Seite 1 von 2
komisches problem
Verfasst: 23. Oktober 2006 09:46
von KingV1k
Hi,
ich benutze Eclipse mit Qt4. ich erstellte zwei projekte. einmal eins mit meinen funktionen und außerdem eine GUI. Am Ende als beide fertig waren versuchte ich sie in einem neuen Projekt zu verbinden. Das .pro File erstellte ich mit dem Make Target "qmake -project". Das Makefile erstellte ich mit dem Make Target "qmake -makefile". Bishierhin klappte auch alles. Danach benutzte ich das "mingw32-make -f makefile". Aber irgendwie klappt es nicht, weil bei mir jetzt komische fehlermeldungen kommen. Hier ist der Ausschnitt aus meiner Konsole:
-------------------------------------------------------------------------------------
mingw32-make -f makefile all
mingw32-make -f Makefile.Debug all
mingw32-make[1]: Entering directory `Y:/Projekt/Sourcecode/isocreator'
mingw32-make[1]: Nothing to be done for `all'.
mingw32-make[1]: Leaving directory `Y:/Projekt/Sourcecode/isocreator'
mingw32-make -f Makefile.Release all
mingw32-make[1]: Entering directory `Y:/Projekt/Sourcecode/isocreator'
g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-s -Wl,-subsystem,windows -o "release\isocreator.exe" release\main.o release\moc_ui_untitled.o -L"y:\Projekt\qt-win-opensource-src-4.2.0\qt-win-opensource-src-4.2.0\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4
C:\MinGW-5.0.3\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lQtGui4
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\isocreator.exe] Error 1
mingw32-make[1]: Leaving directory `Y:/Projekt/Sourcecode/isocreator'
mingw32-make: *** [release-all] Error 2
-------------------------------------------------------------------------------------
Der Error ist:
ld: cannot find -lQtGui4
Das Warning ist:
Invalid project path: Duplicate path entries.
Kann mir jemand bei meinem Problem helfen?
Verfasst: 23. Oktober 2006 10:54
von KingV1k
hi,
da bin ich wieder. also die oben beschriebenen probleme habe ich geschafft zu lösen. dafür habe ich das Makefile.Release bearbeitet.
Dort ersetzte ich -lQtGui4 durch -lQtGuid4. Wieso das jetzt dewegen funktioniert kann ich mir auch nicht erklären. Ich hoffe jemand kennt noch einen anderen Weg dieses Problem zu beheben. Dadurch kommen wir aber schon gleich zu meinem nächsten Problem:
Wenn ich das Prog über Eclipse starte klappt alles perfekt. Aber wenn ich in meinen Ordner gehe dann finde ich die .exe in zwei ordnern (release und debug). führ ich jetzt eine von denen aus dann kann ich das programm in meinem taskmanager sehen, aber sonst nirgendswo. die gui taucht einfach nicht auf. außerdem frisst mein prog die ganze cpu-leistung.
Kann mir das bitte jemand erklären?
Mfg
KingV1k
Verfasst: 23. Oktober 2006 10:59
von Christian81
Du musst Makefile.Debug bzw. Makefile.Release anstatt Makefile benutzen. qmake erstellt unter win32 standardmässig beide
QtGuid4 -> debug lib
QtGui4 -> release lib
Verfasst: 23. Oktober 2006 11:11
von KingV1k
Hi Christian81,
ich hab dich nicht ganz verstanden wie du es meintest "Du musst Makefile.Debug bzw. Makefile.Release anstatt Makefile benutzen."
Wo ist den überhaupt der Unterschied zwischen den beiden?
Verfasst: 23. Oktober 2006 11:16
von Christian81
KingV1k hat geschrieben:Hi Christian81,
ich hab dich nicht ganz verstanden wie du es meintest "Du musst Makefile.Debug bzw. Makefile.Release anstatt Makefile benutzen."
Wo ist den überhaupt der Unterschied zwischen den beiden?
Der Unterschied liegt wohl darin, dass im Debug-Mode Debuginformationen mit eingebunden werden, im Release-Mode wohl eher nicht...
Es sollten daher beide QtGui(d)4 - libs in qt-dir/lib vorliegen. Wenn nicht, hast Du wohl bei configure.exe nur '-debug' angegeben was in diesem Fall dann zu deinem Fehler führt.
In eclipse solltest Du also nicht "Makefile" als Projekt angeben sondern "Makefile.Debug" wenn Du noch entwickelst und dann später "Makefile.Release" wenn Du es ausliefern willst.
Verfasst: 23. Oktober 2006 13:01
von KingV1k
Hi,
und was steht in diesen Debuginformationen? Hast du ein Beispiel dafür? (ich habe bei google nichts darüber gefunden).
In eclipse solltest Du also nicht "Makefile" als Projekt angeben sondern "Makefile.Debug" wenn Du noch entwickelst und dann später "Makefile.Release" wenn Du es ausliefern willst.
Ich versteh das noch immer nicht. Was ändert sich dadurch bei der Benutzung? Wie meinst du Makefile.Debug benutzen? Nur die Änderungen in dieser Makefile.Debug machen anstatt in der Makefile? Oder wie benutze ich die Makefile.Debug? Was für Vorteile bringt es die Makefiles zu unterscheiden?
Verfasst: 23. Oktober 2006 13:16
von Christian81
Nunja - was wird schon beim debug-Build anders sein? Ich schätze mal damit kann man besser debuggen...
Und warum man immer nur eins der Makefiles in Eclipse nehmen sollte - das Kompilieren dauert sonst länger, was beim Entwickeln doch schon nervt., und der Release-Build hat im Grunde da auch keinen Sinn.
Und die Makefiles sollte man auf keinen Fall von Hand ändern sondern immer qmake dafür benutzen.
Verfasst: 23. Oktober 2006 13:38
von KingV1k
Ich hab gradeben bisschen den Unterschied der beiden Makefiles angeguckt. Dabei ist mir aufgefallen:
Makefile.Debug:
LIBS = -L"y:\Projekt\qt-win-opensource-src-4.2.0\qt-win-opensource-src-4.2.0\lib" -lmingw32 -lqtmaind -lQtGuid4 -lQtCored4
Makrfile.Release:
LIBS = -L"y:\Projekt\qt-win-opensource-src-4.2.0\qt-win-opensource-src-4.2.0\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4
Für die denen es nicht aufgefallen ist bei Debug steht ein "d" immer angehangen. bei release nicht.
1. Also wenn Makefile.Debug einfach nur besser zum debugen sein soll, dann kann ich ja auch einfach nur release nehmen. (dadurch sollte das compilen schneller gehen. oder?)
2. Normalerweise werden ja immer beide Makefiles erzeugt und benutzt. Was ist wenn ich jetzt aber nur eins benutzen will? in der pro-file haben ich dafür keinen eintrag gefunden. und in der makefile sollte man es eigentlich nicht ändern. wie soll ich es sonst machen?
Verfasst: 23. Oktober 2006 13:47
von Christian81
KingV1k hat geschrieben:
Für die denen es nicht aufgefallen ist bei Debug steht ein "d" immer angehangen. bei release nicht.
Das ist der Sinn der Übung...
KingV1k hat geschrieben:
1. Also wenn Makefile.Debug einfach nur besser zum debugen sein soll, dann kann ich ja auch einfach nur release nehmen. (dadurch sollte das compilen schneller gehen. oder?)
Nein, im Gegenteil - im Release wird das executable noch optioniert, das Compilieren dauert also länger. Ausserdem kann man das executable dann nicht debuggen...
2. Normalerweise werden ja immer beide Makefiles erzeugt und benutzt. Was ist wenn ich jetzt aber nur eins benutzen will? in der pro-file haben ich dafür keinen eintrag gefunden. und in der makefile sollte man es eigentlich nicht ändern. wie soll ich es sonst machen?
Man nehme die qmake-Doku und lese:
http://doc.trolltech.com/4.2/qmake-vari ... tml#config
Verfasst: 23. Oktober 2006 14:41
von KingV1k
ok das compilen klappt ja inzwischen mit der debug-version, aber mein problem ist das ich mein programm aus eclipse aus starten kann. aber nicht anders. Wenn ich es normal starte dann startet es nur im hintergrund und bringt meine cpu-auslastung auf 100%. und ich glaube nicht das es an den 833 MHz meines Rechners liegt.
Mfg
KingV1k
edit:
oder muss man die release-version starten damit es klappt? kann ich im moment nicht testen, weil ich qt neu compile und das dauert noch bisschen.
Verfasst: 23. Oktober 2006 14:47
von Christian81
Nein, es ist natürlich unerheblich ob man Release oder Debug startet. Schau bitte ob Du ggf. noch alte Qt-Dlls rumliegen hast die evtl. aus Versehen benutzt werden.
Verfasst: 23. Oktober 2006 15:07
von KingV1k
wo soll ich den nach diesen alten Qt-dlls gucken? Hast du eine Vorahnung woran es liegen kann?
Verfasst: 23. Oktober 2006 15:15
von Christian81
Überall in deinem PATH und nein - noch habe ich keine Ahnung. Geht z.b. der Designer?
Verfasst: 23. Oktober 2006 15:21
von KingV1k
der qtdesigner funktioniert und alte Qt-dlls hab ich anscheinend auch nicht drin.
Verfasst: 23. Oktober 2006 15:25
von Christian81
Dann solltest Du deinen Code soweit abspecken bis es funktioniert oder deinen Code mal posten (als Anhang bitte, nicht einfach posten)