5.5. Glibc-2.14.1

5.5.1. Installation von Glibc

Wie der Mittelteil vermuten lässt, sind hier drin Bibliotheken für den C-Compiler. Die werden für recht grundlegende Dinge verwendet wie Speicher zuweisen, Verzeichnisse durchstöbern, Dateien öffnen, hineinschreiben und schließen, nach Vorlagen durchsuchen, etwas Arithmetik und so weiter.

[Warnung]

Warnung

Warnung! Beachten von --enable-kernel=2.6.25 ist wichtig! Ältere Kernel sind einfach zu alt, da hilft nur mehr die Live-CD!

Jetzt erst einmal auspacken:

tar -xJf pakete/glibc-2.14.1.tar.xz &&
cd glibc-2.14.1/

Wegen Änderungen in GCC-4.6.1 muss Glibc gepatcht werden:

patch -Np1 -i ../patches/glibc-2.14.1-gcc_fix-1.patch

Noch ein Patch ohne den das weitere Bauen des Molli fehlschlagen könnte:

patch -Np1 -i ../patches/glibc-2.14.1-cpuid-1.patch

Und wieder erzeugen wir auf Empfehlung der Glibc-Entwickler ein Extraverzeichnis in dem die Glibc dann kompiliert wird:

mkdir -v ../glibc-build &&
cd ../glibc-build

Und jetzt kommt es auf die Rechnerarchitektur an, aber die zu erfahren ist nicht schwer, das macht im folgenden Kommando der Befehl uname -m. Das $ und die Klammern um den Befehl bewirken das dieser zuerst ausgeführt wird, so das an Stelle von $(uname -m) dort dann z.B. i686 steht:

case $(uname -m) in i686) echo "CFLAGS += -march=i686 -mtune=native" > configparms ;; esac

Dadurch das wir für march i686 verwenden kann der erzeugte Code auch auf anderen Maschinen die einen Prozessor der i686 Familie haben ausgeführt werden. Würden wir hier native eintragen, kann der Code nur noch auf CPUs des gleichen Typs ausgeführt werden. Wer das möchte kann hier also -march=native verwenden. Dadurch wird der Code noch besser und weitreichender an die Möglichkeiten der CPU angepasst.

Falls Dein Prozessor schon älter ist, i486 oder i586 solltest Du folgenden Befehl alternativ zum vorhergehenden verwenden:

case $(uname -m) in i[4,5]86) echo "CFLAGS += -march=i486 -mtune=native" > configparms ;; esac

i386 wird seit Glibc Version 2.8 nicht mehr unterstützt.

Jetzt konfigurieren:

../glibc-2.14.1/configure --prefix=/tools \
    --host=$MOLLI_TGT --build=$(../glibc-2.14.1/scripts/config.guess) \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.25 --with-headers=/tools/include \
    libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes

Die Bedeutung der Parameter für configure:

--host=$MOLLI_TGT, --build=$(../glibc-2.14.1/scripts/config.guess)

Wieder wird hier Glibc zum Crosskompilieren geeignet gemacht mit dem Cross-Compiler und Cross-linker in /tools.

--disable-profile

die Bibliotheken werden ohne Profilinformationen geschaffen. Dass das gewünscht ist, kann aber vorkommen.

--enable-add-ons

Glibc darf die Zusätze für NPTL samt Bibliotheken nutzen.

--enable-kernel=2.6.25

Dadurch werden nur Kernel >= 2.6.25 unterstützt.

--with-headers=/tools/include

Glibc soll auch die vorher nach /tools kopierten Header verwenden.

libc_cv_forced_unwind=yes

Beim Crosskompilieren wird forced unwind sonst nicht entdeckt, aber gebraucht.

libc_cv_c_cleanup=yes

Auch C sauber machen wird beim Crosskompilieren sonst nicht gefunden.

Trotzdem gibt es Fehlermeldungen, wonach msgfmt fehlt oder ungeeignet wäre und daher einige Funktionen fehlten. Das ist weiter ziemlich uninteressant, weil Gettext auch fehlt, das darauf Wert legen würde:

configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

Also weiter mit:

make

Aber Folgendes: Würde jetzt ein Testlauf versucht, wären lokale Daten wie Zeit, Datum u. ä. nötig. Es wird daher ein Testlauf nicht empfohlen, wobei dann lokale Daten auch überflüssig sind. Aber das Thema wird sicher noch behandelt.

Installiere das Paket:

make install

Zu Ende wie immer raus hier und löschen:

cd .. &&
rm -rf glibc-*