Geschätzte Kompilierzeit: 1.0 SBU Ungefähr benötigter Festplattenplatz: 194 MB |
Binutils ist eine Sammlung von Software-Entwicklungswerkzeugen, zum Beispiel Linker, Assembler und weitere Programme für die Arbeit mit Objektdateien und Archiven.
Installierte Programme: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings und strip
Installierte Bibliotheken: libiberty.a, libbfd.[a,so] und libopcodes.[a,so]
Binutils ist abhängig von: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
Es ist wichtig, das Binutils als erstes Paket kompiliert wird, weil Glibc und GCC verschiedene Tests bezüglich Linker und Assembler durchführen und daraufhin erst diverse Features einschalten.
Anmerkung: Auch wenn Binutils ein wichtiges Paket in der toolchain ist werden wir nicht die Test-suite durchlaufen lassen. Erstens ist die Test Umgebung noch nicht entsprechend vorbereitet und zweitens werden die nun kompilierten Programme sowieso von denen des zweiten Durchlaufes überschrieben.
Dieses Paket funktioniert nicht gut wenn nicht die Standard Optimierungseinstellungen (inklusive der -march und -mcpu Optionen) benutzt werden. Deshalb sollten event. gesetzte Umgebungsvariablen die die Standard Optimierung überschreiben - zum Beispiel CFLAGS und CXXFLAGS - für den Kompiliervorgang von Binutils zurückgesetzt oder entsprechend abgeändert werden.
Die Dokumentation zu Binutils empfiehlt, Binutils ausserhalb des Quellverzeichnisses zu kompilieren:
mkdir ../binutils-build cd ../binutils-build |
Anmerkung: Wenn sie die angegebenen SBU Werte im Buch benutzen möchten müssen sie nun die Zeit messen, die sie zum kompilieren dieses Pakets benötigen. Dies können sie relativ einfach auf folgende Art 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 dem Verzeichnis /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 Unterverzeichnisse. Eine statisch gebaute Version würde ansonsten fehlschlagen.Wir benutzen diese Option um dieses Problem zu umgehen.
LDFLAGS="-all-static": Dies teilt dem Linker mit, das alle Binutils Programme statisch gelinkt werden sollen. Genaugenommen wird "-all-static" zuerst an libtool übergeben, welches dann wiederum "-static" an den Linker übergibt.
Und installieren sie das Paket:
make install |
Bereiten sie nun den Linker auf das spätere hinzufügen von Glibc 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 make Programm an, alle kompilierten Dateien im Unterverzeichnis ld zu löschen.
-C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib: Diese Option kompiliert alles im Unterverzeichnis ld erneut. Das angeben der LIB_PATH makefile Variable auf der Kommandozeile überschreibt den Standardwert und zeigt auf das temporäre tools Verzeichnis. Der Wert dieser Variable spezifiziert den Standard Bibliothek Suchpfad für den Linker. Sie werden später in diesem Kapitel sehen wie diese Vorbereitung angewendet wird.
Warnung |
Entfernen sie die Binutils Kompilier- und Quellverzeichnisse noch nicht. Sie benötigen sie später in dem jetzigen Zustand. |
Zurück | Zum Anfang | Weiter |
Vorbereiten der Installationsumgebung | Nach oben | Installieren von GCC-3.3.1 - Durchlauf 1 |