6.13. Binutils-2.15.94.0.2.2

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.3 SBU
Ungefähr benötigter Festplattenplatz: 158 MB
Die Installation ist abhängig von: Bash, Bison, Coreutils, Diffutils, Flex, GCC, Gettext, Glibc, Grep, M4, Make, Perl, Sed und Texinfo

6.13.1. Installation von Binutils

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.

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.

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

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

Bereiten Sie Binutils zum Kompilieren vor:

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

Kompilieren Sie das Paket:

make 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 ../binutils-2.15.94.0.2.2/include/libiberty.h /usr/include

6.13.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.