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

Axel Weiß aweiss at informatik.hu-berlin.de
Di Dez 7 19:21:49 CET 2004


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...

> Für ein gültige Urteil zur Beschleunigung der Laufzeit des erzeugten
> Codes fehlt mir ein Tool. Aber der selbstkompilierte Mozilla
> ist deulich schneller als das Binärpaket einer Heft-CD.
> 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?)

> dann XFree, die meisten libs aus 
> der Reihe glib2, gtk2 in Richtung gnome-2.4, ImageMagick, Gimp,
> Mozilla-1.7.2 (das Update für Suse-9.2) und einige Gnomepakete
> (nautilus,  epiphany und einiges 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. Beispiel:

enum EinEnumTyp {E1=0, E2, E3, NUM_E};
// NUM_E hat keine 'enumerierte' Semantik, sondern sagt aus, wie viele 
Einträge in der (wachsenden) Definition stecken. Dann lassen sich so 
Dinge machen wie:

EinAndererTyp tabelle[NUM_E] = {...};
// oder
for (EinEnumTyp e=0; e<NUM_E; ++e) ...

Und eine switch-Anweisung sieht dann so aus:

switch (e){
case E1: ... break;
case E2: ... break;
case E3: ... break;
default: break;
}

Das letzte break kann man weglassen, das ; nicht. Und ohne default muss 
man entweder ein case NUM_E: schreiben (was keine Semantik besitzt) 
oder man handelt sich Compilerwarnungen ein.

> Bei c++ nehmen es einge Programierer nicht so genau mit dem
> Verteilen von ';'.
> Ich habe nur das korrigiert, was ich verstanden habe, schließlich
> soll der Code auch stabil laufen.
>
> Das ebx-Problem ist mir bisher 3 mal begegnet.
> Bei libpng-1.2.5,  SDL-1.2.7 und gstreamer.
> Solange ich nicht verstanden habe, was da gemacht wird, und
> wie ich es seriös beheben kann, greife ich da nicht ein.
> Für gnome-2.4 der Suse-9.1 habe ich ja die Binärpakete.
> Den gstreamer für gnome-2.6.1 habe ich nun doch mit dem
> gcc-3.3 übersetzt, da es sonst bei meinen Vorhaben, gnome-2.6.1
> aus den Quellpacketen der Linux-user-CD für meine Suse-9.1
> zu übersetzen, nicht weiter geht.

Wäre doch interessant, mal auszuprobieren, ob die Pakete ohne diesen 
Hack auch laufen...

> 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ß...

Gruß,
			Axel

-- 
Humboldt-Universität zu Berlin
Institut für Informatik
Signalverarbeitung und Mustererkennung
Dipl.-Inf. Axel Weiß
Rudower Chaussee 25
12489 Berlin-Adlershof
+49-30-2093-3050
** www.freesp.de **



Mehr Informationen über die Mailingliste linux-l