6.19. Binutils-2.22

6.19.1. Abhängigkeiten

Binutils

   Installation hängt ab von:  Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Glibc, Grep, Make, Perl, Sed, Texinfo und Zlib
   Test Umgebung hängt ab von:  DejaGNU und Expect
   Optionale Abhängigkeiten:  Keine

6.19.2. Installation der Binutils

Man könnte noch kurz überprüfen, ob die PTY auch wirklich in der Umgebung von chroot noch arbeiten, was man mit diesen Test prüfen kann:

expect -c "spawn ls"

Das Kommando sollte folgende Ausgabe erzeugen:

spawn ls

Wenn allerdings die folgende Ausgabe erscheint, ist das System nicht korrekt eingerichtet. Beseitige den Fehler bevor Du weiter machst.

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

Die Lösung ist recht einfach, Deine Kernel Konfiguration sollte folgendes enthalten:

CONFIG_UNIX98_PTYS=y
CONFIG_DEVPTS_FS=y

Der nächste Befehl soll verhindern, dass eine zu alte standards.info Datei installiert wird:

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

Ein Paar von den Tests müssen repariert werden da sie mit GCC-4.6.2 fehlschlagen würden.

sed -i "/exception_defines.h/d" ld/testsuite/ld-elf/new.cc &&
sed -i "s/-fvtable-gc //" ld/testsuite/ld-selective/selective.exp

Noch einmal: Binutils soll von außerhalb kompiliert werden!

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

Bereite das Paket zum kompilieren vor:

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

Das Paket kompilieren:

make tooldir=/usr

Die Bedeutung der Parameter für make:

tooldir=/usr

Das endgültige Verzeichnis ist mit $(exec_prefix)/$(target_alias) fixiert, bei X86_64 zum Beispiel in /usr/x86_64-unknown-linux-gnu . Wir haben ein anderes Vorgehen und deswegen ist /usr nicht das Ziel. Bei Crosskompilieren gilt aber das vorher gesagte. Zur Erinnerung: Crosskompilieren heißt, auf dem einen Rechner Molli für einen gänzlich anderen herrichten.

[Wichtig]

Wichtig

Und endlich ist es soweit niemand darf jetzt darauf verzichten, auf das:

Teste die Resultate:

make check

Installiere das Paket:

make tooldir=/usr install

Installiere die libiberty Headerdatei, sie wird von einigen Programmen gebraucht:

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

6.19.3. Inhalt der Binutils

Installierte Programme:  addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings, and strip
Installierte Bibliotheken:  libiberty.a, libbfd.{a,so}, and libopcodes.{a,so}

Kurze Beschreibung

ar

Erzeugt, modifiziert und extrahiert Dateien aus Archiven.

as

Ein Assembler der die Ausgabe von gcc in Objekt Dateien assembliert.

ld

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

nm

Listet die Symbole die in einer gegebenen Objekt Datei vorkommen.

readelf

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

strip

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