[linux-l] Fragen zum Compiler gcc-3.4.x

Juergen Rienaecker j.rienaecker at arcor.de
Mi Dez 8 12:31:19 CET 2004


Axel Weiß schrieb:
> 
> Juergen Rienaecker wrote:
> > Das kann ich machen, wenn es hilft.
> 
> > Nun zu meinen bisherigen Erfahrungen mit dem Gcc-3.4.3.
> > Alles was ich mit ihm übersetzen konnte, läuft stabil.
> > Ich habe gemessen an komprimierten rpm-Dateien jetzt schon
> > fast 200 MB übersetzt.
> 
> Hallo Jürgen,
> 
> Es wäre richtig interessant zu erfahren, welche Kniffe zum Erfolg
> führten...
> 
Ich habe mit den Compilerfehlermeldungen mir den Quellcode angeschaut
Wenn es eine Redeklaration im *.c-file war, habe ich den zugehörigen
*.h-angepaßt.
Fehlte das ';' hinter default: so habe ich es gesetzt.
Das waren bei C-Programmen fast alle Probleme wenn man von dem
ebx-Problem mal absieht.
>
> > Ich habe auf meiner Suse-9.1 zunächst alle Pakete, die ich für
> > Laufzeit der wesentlichen Programme für relevant hielt, mit dem
> > gcc-3.4.3 neu übersetzt. Also zunächst den Kernel, auch den
> > Suse-kernel habe ich geknackt,
> 
> Hast Du Dir gemerkt, was Du verändert hast? (Oder kommt man da von
> selbst drauf, wenn man nur den Compiler anwirft und sich die
> Fehlermeldungen ansieht?)
>
Siehe oben.
Ich habe es am Ende des Spec-files notiert.
Später habe ich nicht mehr das eigentliche Quellpaket modifiziert
sondern habe kleine patchfiles geschrieben, die dann im Spec-file
aufgerufen werden. Das ist wohl der solidere Weg.
Die Fehler von c++ Programmen sind schwerer zu behandeln, was
einmal aus der nicht leicht zuverstehenden Compilerfehlermeldung
(eine Kette von Dateien) resultiert, zum anderen aus meinen
spärlichen C++-Kentnissen.
Mir fällt nur ein erfolgreiches Beispiel ein.
Nämlich bei mozilla-1.7.2
dort steht jetzt im Spec-file
 %changelog -n mozilla
 * Tue Nov 30 2004 - j.rienaecker
 - nsLDAPChannel.cpp:59: Fehler: extra `;'
   habe in mozilla/directory/xpcom/base/src/nsLDAPChannel.cpp das
   Semikolon entfernt

Bei Abiword bin ich gescheitert und finde dazu nichts mehr.
>
> > Der gcc-3.4.3 tolleriert schlampiges Programieren weniger.
> 
> ... und das ist gut so ;)
> 
> > Er mag es nicht wenn in source-xy.h etwas wesentlich anderes
> > für eine Funktion steht als in source-xy.c.
> > Bei "switch  case" tolleriert er kein default: ohne ';'.
> > Ein default ohne folgende Anweisung ist ja auch unnötig.
> 
> (Nicht ganz) Bei einem fehlenden default kriegst Du eine Warnung, wenn
> nicht alle enum-Werte in den case-Zweigen auftauchen, da ist ein leerer
> default-Zweig schon hilfreich.
> ..
> 
> ohne default handelt man sich Compilerwarnungen ein.
> 
Okay.
Aber was Compilerwarnungen betrifft, nimmt man es da nicht so genau.
Man wird meist mit derart vielen Compilerwarnungen überschüttet,
daß man eigentlich staunt, daß das Programm überhaupt läuft.
Eine rühmliche Ausnahme sind die letzten kernel von kernel.org.
Ich habe es mir abgewöhnt, allen Compilerwarnungen nachzugehen,
wenn das Ergebnis anscheinend okay ist.
> 
> >
> > Das ebx-Problem ist mir bisher 3 mal begegnet.
> 
> Wäre doch interessant, mal auszuprobieren, ob die Pakete ohne diesen
> Hack auch laufen...
> 
Mal sehen. Zur Zeit beschäfftig mich mehr das Problem, warum
bei gnome-2.6.1 Nautilus und gthumb keine *.gif, *.jpg -Dateien
erkennen. Ehe ich das nicht rausgefunden habe, geht es nicht weiter.
Gnome-2.6.1 ist im Sommer rausgekommen. Da gab es noch keine
Suse-9.2. Also müßte es mit der Suse-9.1 gehen.
>
> > Suse unterstützt die Selbtcompilierer nicht, sonst würde es
> > Patchdateien für die Quellpakete geben. Warum muß ich 40 MB
> > für ein Update der Kernelsources oder für XFree saugen wenn
> > der eigentliche Patch nur wenige KB ist ?
> 
> Du unterschätzt das Problem, Quellcode durch eine Menge von Patches
> konsistent zu halten. Gerade wenn es viele Patches für ein Paket werden
> (Beispiel: kernel), muss darauf geachtet werden, alle Patches in der
> richtigen Reihenfolge anzuwenden. Das erfordert Leute mit Weitblick ;)
> und eine Infrastruktur mit regelmäßiger Pflege. Bei SuSE habe ich eher
> den Eindruck, dass die froh sind, wenn die meisten Pakete so laufen,
> wie sie ausgeliefert wurden. Das Saugen großer Patches macht auch mit
> DSL keinen Spaß...

Dem kann ich nicht ganz zustimmen. kernel.org bringt auch Patchpakete
und bei XFree und anderen *scr.rpm-Paketen ist es üblich, daß das
eigentliche Quellpaket unverändert bleibt. Es gibt dann nur eine
Reihe von patch- bzw. *.dif-Dateien, die vom Spec-file verarbeitet
werden.
Es sind in diesem Falle wirklich nur ein neuer Spec-file und ein paar
neue patch-Dateien nötig.
Und das sind nur wenige KB !

Übrigens baut der Gcc-3.4.3, wenn man ihn compiliert, aus den
devel-Paketen des laufenden Systems auch noch zusätzliche Prototyps,
die er bei sich eingliedert !

es grüßt Jürgen Rienäcker



Mehr Informationen über die Mailingliste linux-l