Servus,
ich hab hier ein dickes Problem.
Ich hab in letzter Zeit einige Updates in mein Linux-System eingespielt, dabei wohl auch qt und den gcc auf den neusten Stand gebracht.
Jetzt hat sich die Größe der libs und der executables in meinem Projekt grob verzehnfacht!
Natürlich kompiliere ich im release- und nicht im debug-mode, genau wie vorher.
Konkret:
Vorher: qt 4.3.1, gcc 4.2.1
lib: 1,7MB, exec 2MB
Nachher: qt 4.4.3, gcc 4.3.2
lib: 14,8MB, exec 20,7MB
Was ist hier schiefgelaufen? Muss man im neuen gcc den release-mode noch woanders einschalten als im .pro via
CONFIG+= release
CONFIG-= debug
Any ideas?
[Solved]gcc mit qtproduziert plötzlich 10-mal so große Files
[Solved]gcc mit qtproduziert plötzlich 10-mal so große Files
Zuletzt geändert von PhilippM am 22. Januar 2009 18:35, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
okay, dass kann natürlich sein. Wie stelle ich das fest? Denn ich hab Qt nicht selbst kompiliert, ich habs über die Paketverwaltung meiner Distro eingespielt.Christian81 hat geschrieben:Ggf. ist Qt statisch kompiliert.
Ich denke, man sollte das statische linken den binaries ansehen können, oder? Sprich wenn ich ein ldd auf meine exe mache, sollte da keine QT-Bibliothek aufgeführt sein.
Wie kann ich ggf einstellen, ob ich gegen Qt statisch oder dynamisch linken will?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Hey,
da scheinen wirklich debugsymbole drinzusein!
Ich hab
strip --strip-debug meinelib.a
gemacht und sie ist von 15MB auf knackige 1,5MB geschrumpft.
Jetzt meine Frage: Warum ignoriert mein Compiler oder mein qmake die Anweisung
CONFIG+=release
??? und warum ignoriert er das erst seit dem letzten Update?
da scheinen wirklich debugsymbole drinzusein!
Ich hab
strip --strip-debug meinelib.a
gemacht und sie ist von 15MB auf knackige 1,5MB geschrumpft.
Jetzt meine Frage: Warum ignoriert mein Compiler oder mein qmake die Anweisung
CONFIG+=release
??? und warum ignoriert er das erst seit dem letzten Update?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
release hat nichts mit Symbolinformationen zu tun. Sondern nur ob Optimierungen an sind oder nicht. Ich weiß dass man bei ./configure (zumindest in 4.4.3) mit angeben kann ob die Symbole mit drin sein sollen oder nicht - ggf. hat das Deine Distri mit aktiviert. Bei SuSE sind sie allerdings in einem separatem rpm-Paket.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
[SOLVED]
Bei Suse 11.0 war ein Fehler in der g++.conf
Also unter /usr/share/qt4/mkspecs/common
steht in der g++.conf
Also beides mal -g
Das führt zu dem beobachteten Verhalten. Unter SuSe 11.1 ist das korrigiert, oder wenn man sich den kram selbst kompiliert (was ich dann getan habe) funktionierts auch.
Bei Suse 11.0 war ein Fehler in der g++.conf
Also unter /usr/share/qt4/mkspecs/common
steht in der g++.conf
Code: Alles auswählen
QMAKE_CFLAGS_RELEASE += -O2 -march=i586 -mtune=i686 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -O2 -g
QMAKE_CFLAGS_DEBUG += -g
Das führt zu dem beobachteten Verhalten. Unter SuSe 11.1 ist das korrigiert, oder wenn man sich den kram selbst kompiliert (was ich dann getan habe) funktionierts auch.