Binutils-2.14 - Durchlauf 1

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

Approximate build time:  1.0 SBU
Required disk space:     170 MB

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

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 daraufhin erst diverse Funktionalitäten einschalten.

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 nun Binutils zum Kompilieren vor:

../binutils-2.14/configure --prefix=/tools --disable-nls

Die Bedeutung der configure-Parameter:

  • --prefix=/tools: Dies teilt dem configure-Skript mit, die Installation der Binutils-Programme in den Ordner /tools vorzubereiten.

  • --disable-nls: Dies deaktiviert die Internationalisierung (oft auch als i18n abgekürzt). Wir brauchen keine Internationalisierung für unsere statischen Programme und nls verursacht häufig Probleme beim statischen Verlinken von Programmen.

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. Wir benutzen diese Option zur Umgehung dieses Problems.

  • 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 dennoch 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-Bibliothekssuchpfad 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 „Inhalt von Binutils“.