6.11. Binutils-2.18

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

Geschätzte Kompilierzeit: 1.7 SBU inkl. Testsuite
Etwa Benötigter Speicherplatz: 186 MB inkl. Testsuite

6.11.1. Installation von Binutils

Jetzt ist ein guter Zeitpunkt, um sicherzustellen, dass die Pseudo-Terminals (PTYs) in Ihrer chroot-Umgebung funktionieren. Mit dem folgenden schnellen Test sehen Sie, ob alles korrekt eingerichtet ist:

expect -c "spawn ls"

Falls die folgende Meldung erscheint, ist Ihre chroot-Umgebung nicht für PTYs vorbereitet:

The system has no more ptys.
Ask your system administrator to create more.

Das Problem muss behoben werden, bevor Sie die Testsuites von Binutils und GCC laufen lassen.

Bintutils erkennt keine neueren Versionen von Texinfo als 4.9. Dieses Problem kann mit folgendem Patch behoben werden:

patch -Np1 -i ../binutils-2.18-configure-1.patch

Wenden Sie den folgenden Patch an, um Fehler beim Durchlaufen der Testsuite zu vermeiden:

patch -Np1 -i ../binutils-2.18-GCC43-1.patch

Verhindern Sie die Installation der veralteten Datei standards.info; im weiteren Verlauf wird bei der Installation von Autoconf eine aktuelle Version installiert:

rm -fv etc/standards.info
sed -i.bak '/^INFO/s/standards.info //' etc/Makefile.in

Die Dokumentation zu Binutils empfiehlt, Binutils außerhalb des Quellordners zu kompilieren:

mkdir -v ../binutils-build
cd ../binutils-build

Bereiten Sie Binutils zum Kompilieren vor:

../binutils-2.18/configure --prefix=/usr \
    --enable-shared

Kompilieren Sie das Paket:

make tooldir=/usr

Die Bedeutung des make-Parameters:

tooldir=/usr

Normalerweise ist tooldir (der Ordner, in den die ausführbaren Dateien endgültig installiert werden) auf $(exec_prefix)/$(target_alias) eingestellt. Ein i686-Computer löst dies zum Beispiel zu /usr/i686-pc-linux-gnu auf. Da wir aber nur für unser eigenes System installieren, brauchen wir diesen speziellen Ordner in /usr nicht. Diese Konfiguration fände z. B. dann Verwendung, wenn das System zum Querkompilieren genutzt würde (zum Beispiel, um auf einer Intel-Maschine Code zu generieren, der auf einem PowerPC ausgeführt werden kann).

[Wichtig]

Wichtig

In diesem Abschnitt wird die Testsuite von Binutils als kritisch eingestuft. Wir raten Ihnen, die Tests unter keinen Umständen zu überspringen.

Testen Sie das Ergebnis:

make check

Installieren Sie das Paket:

make tooldir=/usr install

Installieren Sie die Header-Datei libiberty, sie wird von einigen Paketen benötigt:

cp -v ../binutils-2.18/include/libiberty.h /usr/include

6.11.2. Inhalt von Binutils

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}

Kurze Beschreibungen

addr2line

Konvertiert Programmadressen zu Dateinamen und Zeilennummern. Mit Hilfe des Programmnamens und einer Speicheradresse benutzt das Programm Debugging-Informationen in der ausführbaren Datei, um herauszufinden, welche Quelldatei und Zeilennummer mit der Adresse assoziiert ist.

ar

Wird zum Erzeugen und Extrahieren von Dateien aus einem Archiv verwendet.

as

Ein Assembler. Er assembliert die Ausgabe von gcc zu Objektdateien.

c++filt

Wird vom dynamischen Linker benutzt, um C++- und Java-Symbole aufzuschlüsseln, damit überladene Funktionen nicht in Konflikt geraten.

gprof

Zeigt call graph-Profiling-Daten an.

ld

Ein Linker. Er verbindet mehrere Objektdateien und Archivdateien zu einer einzigen Datei, replaziert ihre Daten und verbindet ihre Symbolreferenzen.

nm

Listet alle in einer Objektdatei vorkommenden Symbole auf.

objcopy

Wird zum Konvertieren eines bestimmten Objektdateityps in einen anderen verwendet.

objdump

Zeigt ausgewählte Informationen über eine Objektdatei an. Diese Informationen sind hauptsächlich für Programmierer sinnvoll, die an den Kompilierwerkzeugen arbeiten.

ranlib

Erzeugt einen Index des Archivinhalts und speichert ihn im Archiv. Der Index listet alle reallokierbaren Symbole auf, die von im Archiv enthaltenen Objektdateien definiert werden.

readelf

Zeigt Informationen über Binärdateien vom Typ ELF an.

size

Listet die Abschnitts- und Gesamtgröße für eine Objektdatei auf.

strings

Gibt für jede angegebene Datei die druckbaren Zeichenketten aus, die eine festgelegte Mindestgröße haben (Voreinstellung ist 4). Bei Objektdateien gibt es in der Voreinstellung nur die Zeichenketten aus den Initialisierungs- und Ladeabschnitten aus. Bei anderen Dateitypen durchsucht es die gesamte Datei.

strip

Entfernt bestimmte Symbole aus Objektdateien (z. B. Debugging-Symbole).

libiberty

Enthält Routinen, die von verschiedenen GNU-Programmen genutzt werden, inklusive getopt, obstack, strerror, strtol und strtoul.

libbfd

Die Bibliothek für Binärdateibezeichner.

libopcodes

Eine Bibliothek zur Behandlung von Obcodes. Sie wird zum Erzeugen von Werkzeugen wie z. B. objdump benutzt. Obcodes sind die „lesbaren“ Versionen der Prozessorinstruktionen.