Details zu diesem Paket finden Sie in Abschnitt 6.11.4, „Inhalt von Glibc“
Glibc enthält die C-Bibliothek. Sie stellt Systemaufrufe und grundlegende Funktionen zur Verfügung (z. B. das Zuweisen von Speicher, Durchsuchen von Ordnern, Öffnen und Schließen sowie Schreiben von Dateien, Zeichenkettenverarbeitung, Mustererkennung, Arithmetik etc.)
Dieses Paket funktioniert unter Umständen nicht fehlerfrei, wenn die voreingestellten Optionen für Compiler-Optimierungen übergangen werden. (Dazu gehören auch -march und -mcpu.) Daher sollten die entsprechenden Umgebungsvariablen (wie z. B. CFLAGS und CXXFLAGS) für den Kompiliervorgang zurückgesetzt oder entsprechend abgeändert werden.
Grundsätzlich gilt: Wenn Sie von dem hier beschriebenen Weg zum Kompilieren von Glibc abweichen, riskieren Sie die Stabilität Ihres gesamten LFS-Systems.
Glibc enthält zwei Testsuites die mit dem Kernel 2.6.11.x fehlschlagen. Das Problem sind hier die Tests selbst, nicht die libc oder der Kernel. Wenn Sie die Testsuite durchlaufen lassen möchten, wenden Sie diesen Patch an:
patch -Np1 -i ../glibc-2.3.4-fix_test-1.patch
Die Dokumentation von Glibc empfiehlt, zum Kompilieren einen gesonderten Ordner zu verwenden:
mkdir ../glibc-build cd ../glibc-build
Als nächstes bereiten Sie Glibc zum Kompilieren vor:
../glibc-2.3.4/configure --prefix=/tools \ --disable-profile --enable-add-ons \ --enable-kernel=2.6.0 --with-binutils=/tools/bin \ --without-gd --with-headers=/tools/include \ --without-selinux
Die Bedeutung der configure-Parameter:
Dadurch werden die Bibliotheken ohne Profiling-Informationen kompiliert. Lassen Sie diesen Parameter weg, wenn Sie mit den temporären Werkzeugen Profiling betreiben möchten.
Dadurch verwendet Glibc NPTL als die Threading-Bibliothek.
Dadurch wird die Glibc mit Unterstützung für Kernel der Serie 2.6.x gebaut.
Dieser Parameter wird nicht wirklich benötigt, stellt aber sicher, dass in Hinsicht auf die Binutils-Programme beim Kompilieren von Glibc nichts schiefgehen kann.
Das verhindert das kompilieren des Programmes memusagestat, welches immer mit Bibliotheken auf dem Host-System verlinkt (libgd, libpng, libz usw.).
Dadurch wird Glibc mit den gerade in den tools-Ordner installierten Kenerl-Headern kompiliert. Auf diese Weise werden alle Funktionen des Kernels erkannt und die Glibc kann entsprechend darauf optimiert werden.
Wenn das Host-System SELinux-Funktionen hat (so z. B. Fedora Core 3), so würden die SELinux-Funktionen auch in Glibc einkompiliert. Die LFS-Werkzeuge unterstützen diese Erweiterungen aber nicht, daher wird eine so erzeugte Glibc nicht korrekt funktionieren.
Während dieser Phase sehen Sie möglicherweise eine Warnung:
configure: WARNING: *** These auxiliary programs are missing or *** incompatible versions: msgfmt *** some features will be disabled. *** Check the INSTALL file for required versions.
Das fehlende oder inkompatible Programm msgfmt ist normalerweise harmlos, aber manchmal kann es zu Fehlern beim Durchlaufen der Testsuite führen. msgfmt ist Teil von Gettext, welches auf dem Host-System installiert sein sollte. Wenn msgfmt zwar vorhanden, aber vollkommen inkompatibel ist, dann sollten Sie das Paket auf dem Host-System aktualisieren. Oder Sie fahren ohne das Paket fort und schauen, ob die Testsuite auch ohne problemlos durchläuft.
Kompilieren Sie das Paket:
make
Der Kompiliervorgang ist nun abgeschlossen. Wie bereits erwähnt, wird empfohlen, die Testsuite für das temporäre System in diesem Kapitel nicht durchlaufen zu lassen. Falls Sie die Testsuite dennoch ausführen möchten, verwenden Sie dafür dieses Kommando:
make check
Eine Information über die kritischen Fehler finden Sie im Abschnitt 6.11, „Glibc-2.3.4“
Die Testsuite von Glibc ist stark von einigen Funktionen Ihres Host-Systems abhängig. Glibc-Fehler in diesem Kapitel sind normalerweise nicht kritisch. Erst in Kapitel 6 wird die endgültige Glibc installiert, dort sollten dann die meisten Tests erfolgreich durchlaufen. Allerdings können selbst in Kapitel 6 noch Fehler auftreten, zum Beispiel beim math-Test.
Wenn ein Fehler auftritt, notieren Sie ihn, dann rufen Sie make check erneut auf. Die Testsuite sollte dann dort fortfahren, wo sie unterbrochen wurde. Sie können dieses Stoppen und Starten umgehen, indem Sie make -k check aufrufen. Aber stellen Sie in diesem Fall sicher, dass Sie die Ausgaben protokollieren, damit Sie später die Logdatei nach den aufgetretenen Fehlern durchsuchen können.
Auch wenn es nur eine harmlose Meldung ist, die Installationsroutine von Glibc wird sich über die fehlende Datei /tools/etc/ld.so.conf beschweren. Beheben Sie diese störende Warnung mit:
mkdir /tools/etc touch /tools/etc/ld.so.conf
Installieren Sie das Paket:
make install
Verschiedene Länder und Kulturen haben auch unterschiedliche Konventionen zum Kommunizieren. Darunter sind einfache Konventionen wie zum Beispiel das Format für Datum und Uhrzeit, aber auch sehr komplexe Konventionen, wie zum Beispiel die dort gesprochene Sprache. Die „Internationalisierung“ von GNU-Programmen funktioniert mit Hilfe der sogenannten Locales. Installieren Sie nun die Glibc-Locales.
Wenn Sie, wie empfohlen, die Testsuite in diesem Kapitel nicht laufen lassen, brauchen Sie auch die Locales nicht zu installieren. Sie werden sie dann im nächsten Kapitel installieren.
Wenn Sie die Glibc-Locales dennoch installieren möchten, führen Sie dieses Kommando aus:
make localedata/install-locales
Alternativ können Sie auch nur die von Ihnen benötigten oder gewünschten Locales installieren. Das geht mit dem Kommando localedef. Detailliertere Informationen dazu finden Sie in der Datei INSTALL aus den Quellen von Glibc. Es gibt jedoch einige Locales die für die Tests von weiteren Paketen vorausgesetzt werden: z. B. die libstdc++-Tests von GCC. Die folgenden Anweisungen installieren einen minimalen Satz von notwendigen Locales, um die nachfolgenden Tests erfolgreich durchführen zu können:
mkdir -p /tools/lib/locale localedef -i de_DE -f ISO-8859-1 de_DE localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro localedef -i en_HK -f ISO-8859-1 en_HK localedef -i en_PH -f ISO-8859-1 en_PH localedef -i en_US -f ISO-8859-1 en_US localedef -i es_MX -f ISO-8859-1 es_MX localedef -i fa_IR -f UTF-8 fa_IR localedef -i fr_FR -f ISO-8859-1 fr_FR localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro localedef -i it_IT -f ISO-8859-1 it_IT localedef -i ja_JP -f EUC-JP ja_JP
Details zu diesem Paket finden Sie in Abschnitt 6.11.4, „Inhalt von Glibc“