6.19. Binutils-2.21.1

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

Das ist hoffentlich das letzte Mal, jetzt einmal aber auspacken und rein wechseln:

tar -xf pakete/binutils-2.21.1.tar.bz2 &&
cd binutils-2.21.1/

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.21.1/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.21.1/include/libiberty.h /usr/include

Nun das Verzeichnis verlassen und dann entfernen:

cd .. &&
rm -rf binutils-*

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

ld

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

readelf

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

strip

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