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

Juergen Rienaecker j.rienaecker at arcor.de
So Dez 5 15:01:31 CET 2004


Ihno Krumreich schrieb:
> 
> On Sun, Nov 07, 2004 at 10:50:02AM +0100, Juergen Rienaecker wrote:
> > Ich habe mal ein paar Fragen zum Compiler gcc-3.4.x:
> >
> > Seit wenigen Tagen gibt es ja schon gcc-3.4.3,
> > aber Suse ignoriert ihn für SUSE LINUX 9.2.
> > Warum ?
> 
> Wahrscheinlich sind es viele Pakete die mit 3.4 sich nicht uebersetzen
> lassen.

Es sind nicht so viele, wie ich befürchtet habe.
Meißt ist es aber Schlamperei, die der Compiler nicht mag.
Inkomatible Redeklerationen z.B.

Der Compiler mag auch keine Marke ohne Anweisung und ohne ';'.
Z.B. ein nicht nötiges default: ohne ';'
Bei C++ sind andere wieder zu großzügig mit dem Verteilen von ';'.
Garnicht mag er schlimme Typunverträglichkeiten.
Es ist also mit etws Arbeit verbunden, den Suse-Kernel, Gimp,
oder Mozilla zu übersetzen. Es geht aber und beim Mozillla
(das Updatepaket für die Suse-9.2) hat es sich gelohnt.
Der sebstübersetze Mozilla 1.72 ist deutlich schneller als
das Binärpaket von einer Linux-Heft-CD.

> >
> > Aus dem ganzen gcc--g++-3.4.3 Paket bräuchte ich eigentlich nur für
> > die libstdc++.so.6.0.3 ein rpm-Packet.
> > Wie kann man das schaffen ?
> > Die Hilfen für das Bauen von SPECS sind für den Anfünger für so
> > einen etwas diffizielen Fall nicht so hilfreich.
> 
> Im SPECfile gibt es einen Abschnitt %files. Dort wird angegeben
> welche Dateien teil des binaere RPM werden sollen. Einfach nur die lib
> eintragen.

Ich habe es gelernt, spec-files zu schreiben, indem ich die der
Quellpackete von Suse analysiert habe.
Und nun will ich die Quellen zu gnome-2.6 von der linux-user-CD 
in RPM-Pakete für ein gnome-2.6.2 auf meier Suse-9.1 zu bauen.

Mit dem folgedem Problem werde ich nicht fertig

Bei rpmbuild -bb SPECS/gstreamer.spec

"gstcpu.c: In function `gst_cpuid_i386':
 gstcpu.c:72: error: PIC register `ebx' clobbered in `asm'
 make[4]: *** [libgstreamer_0.8_la-gstcpu.lo] Error 1 "

in gstreamer-0.8.1/gst/gstcpu.c steht

#ifdef HAVE_CPU_I386
static void
gst_cpuid_i386 (int x, unsigned long *eax, unsigned long *ebx,
    unsigned long *ecx, unsigned long *edx)
{
  unsigned long regs[4];

  asm (
      /* GCC-3.2 (and possibly others) don't clobber ebx properly,
       * so we save/restore it directly. */
"  pushl %%ebx\n" "  cpuid\n" "  movl %%eax, %0\n" "  movl %%ebx, %1\n"
"  movl %%ecx, %2\n" "  movl %%edx, %3\n" "  popl %%ebx\n":"=o"
(regs[0]),
      "=o" (regs[1]),
      "=o" (regs[2]), "=o" (regs[3])
:    "a" (x)
:    "ebx", "ecx", "edx");

  *eax = regs[0];
  *ebx = regs[1];
  *ecx = regs[2];
  *edx = regs[3];
}
(ich habe die lange Codezeile umbrechen müssen)

Damit kommt der Compiler so nicht klar.
Was bedeutet das ?

Meine CPU ist ein Athlon (1 GHz).

Es grüßt Jürgen Rienäcker
---
Ein Rentner, der als Hobby Linux hat aber sich nicht mit
KDE anfreunden kann, den fvwm2 benutzt und zusehends
an Gnome gefallen findet.



Mehr Informationen über die Mailingliste linux-l