Binutils-2.14

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

Approximate build time:  1.4 SBU
Required disk space:     167 MB

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

Installieren von Binutils

Jetzt ist ein guter Zeitpunkt, um zu überprüfen, dass die Pseudo-Terminals (PTYs) in Ihrer chroot-Umgebung funktionieren. Mit dem folgenden schnellen Test überprüfen wir, ob alles korrekt konfiguriert ist:

expect -c "spawn ls"

Wenn Sie die Nachricht:

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

erhalten, sind die PTYs in Ihrer chroot-Umgebung nicht korrekt konfiguriert. In dem Fall macht es keinen Sinn, die Tests für Binutils und GCC laufen zu lassen, solange Sie das Problem nicht behoben haben. Schlagen Sie bitte im Abschnitt „Einhängen der Dateisysteme proc- und devpts“ und Make_devices nach und führen Sie die empfohlenen Schritte durch, um das Problem zu beseitigen.

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

Bereiten Sie nun Binutils zum Kompilieren vor:

../binutils-2.14/configure --prefix=/usr --enable-shared

Kompilieren Sie das Paket:

make tooldir=/usr

Normalerweise ist tooldir (der Ordner, in den die ausführbaren Dateien installiert werden) auf $(exec_prefix)/$(target_alias) gesetzt, welches dann zum Beispiel zu /usr/i686-pc-linux-gnu aufgelöst wird. Da wir aber nur für unser eigenes System installieren, brauchen wir diesen speziellen Ordner in /usr nicht. Diese Konfiguration würde benutzt werden, 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

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

Testen Sie das Ergebnis:

make check

Die Anmerkungen zur Testsuite aus dem Abschnitt „Binutils-2.14 - Durchlauf 2“ sind hier immer noch gültig. Schlagen Sie nach, falls Sie irgendwelche Bedenken oder Zweifel haben.

Installieren Sie das Paket:

make tooldir=/usr install

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

cp ../binutils-2.14/include/libiberty.h /usr/include

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 Beschreibung

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 erzeugt, manipuliert und extrahiert aus Archiven. Ein Archiv ist eine einzelne Datei, die eine strukturierte Sammlung weiterer Dateien enthält.

as ist 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 ist ein Linker. Er verbindet mehrere Objektdateien und Archivdateien zu einer einzigen Datei, replaziert ihre Daten und verbindet ihre Symbolreferenzen.

nm listet alle Symbole auf, die in einer Objektdatei vorkommen.

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 verwirft Symbole aus Objektdateien.

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

libbfd ist die Bibliothek für Binärdateibezeichner.

libopcodes ist eine Bibliothek zur Behandlung von Obcodes. Sie wird zum Erzeugen von Werkzeugen wie z. B. objdump benutzt. Obcodes sind die Text-Versionen der Prozessorinstruktionen.