5.4. Binutils-2.15.91.0.2 - Durchlauf 1

Binutils ist eine Sammlung von Software-Entwicklungswerkzeugen, zum Beispiel Linker, Assembler und weitere Programme für die Arbeit mit Objektdateien.

Geschätzte Kompilierzeit: 1.0 SBU

Ungefähr benötigter Festplattenplatz: 194 MB

Binutils ist abhängig von: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed und Texinfo

5.4.1. Installieren von Binutils

Es ist wichtig, dass Binutils als erstes Paket kompiliert wird, weil Glibc und GCC verschiedene Tests bezüglich Linker und Assembler durchführen und erst daraufhin bestimmte Funktionen aktivieren.

Dieses Paket funktioniert nicht gut, wenn nicht die Standard Optimierungseinstellungen (inklusive der Optionen -march und -mcpu) benutzt werden. Deshalb sollten eventuell gesetzte Umgebungsvariablen, die die Standardoptimierung überschreiben - zum Beispiel CFLAGS und CXXFLAGS - für den Kompiliervorgang zurückgesetzt oder entsprechend abgeändert werden.

Die Dokumentation zu Binutils empfiehlt, Binutils ausserhalb des Quellordners zu kompilieren:

mkdir ../binutils-build
cd ../binutils-build
[Hinweis]

Hinweis

Wenn die im Buch angegebenen SBU-Werte einen Nutzen haben sollen, müssen Sie nun die Zeit messen, die Sie zum Kompilieren dieses Pakets benötigen. Dies können Sie relativ einfach mit folgendem Kommando tun: time { ./configure ... && ... && ... && make install; }.

Bereiten Sie Binutils zum Kompilieren vor:

../binutils-2.15.91.0.2/configure --prefix=/tools \
    --disable-nls

Die Bedeutung der configure-Parameter:

--prefix=/tools

Dadurch wird das configure-Skript die Binutils-Programme für die Installation in /tools vorbereiten.

--disable-nls

Deaktiviert Internationalisierung; sie wird für die statischen Programmen nicht benötigt und NLS kann beim statischen Linken Probleme verursachen.

Fahren Sie mit dem Kompilieren des Pakets fort:

make configure-host
make LDFLAGS="-all-static"

Die Bedeutung der make-Parameter:

configure-host

Dies erzwingt die sofortige Konfiguration alle Unterordner. Eine statisch gebaute Version würde ansonsten fehlschlagen. Diese Option wird zur Umgehung dieses Problems benutzt.

LDFLAGS="-all-static"

Dies teilt dem Linker mit, dass alle Binutils Programme statisch gelinkt werden sollen. Genaugenommen wird -all-static zuerst an libtool übergeben, welches dann wiederum -static an den Linker übergibt.

Der Kompiliervorgang ist nun abgeschlossen. Normalerweise würden Sie nun die Testsuite durchlaufen lassen, aber in diesem frühen Stadium ist die Testsuite-Umgebung (Tcl, Expect und DejaGNU) noch nicht verfügbar. Ausserdem macht es wenig Sinn die Tests nun laufen zu lassen, weil die Programme aus dem ersten Durchlauf sehr bald durch die aus dem zweiten Durchlauf ersetzt werden.

Installieren Sie das Paket:

make install

Bereiten Sie nun den Linker auf die späteren „Anpassungen“ vor:

make -C ld clean
make -C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib

Die Bedeutung der make-Parameter:

-C ld clean

Dies weist das Programm make an, alle kompilierten Dateien im Unterordner ld zu löschen.

-C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib

Diese Option kompiliert alles im Unterordner ld erneut. Die Angabe der Makefile-Variable LIB_PATH auf der Kommandozeile überschreibt den Standardwert und zeigt auf den temporären tools-Ordner. Der Wert dieser Variable spezifiziert den Standard-Bibliotheksuchpfad für den Linker. Sie werden später in diesem Kapitel sehen, wie diese Vorbereitung zur Anwendung kommt.

[Warnung]

Warnung

Entfernen Sie die Binutils Kompilier- und Quellordner noch nicht. Sie benötigen Sie später in ihrem jetzigen Zustand.

Details zu diesem Paket finden Sie in Abschnitt 6.13.2, „Inhalt von Binutils“