6.11. Binutils-2.16.1

Il pacchetto Binutils contiene un linker, un assemblatore e altri tool per manipolare file oggetto.

Tempo di costruzione approssimativo: 1.5 SBU inclusa la suite di test
Spazio necessario su disco: 172 MB inclusa la suite di test

6.11.1. Installazione di Binutils

Verificare che i PTY funzionino correttamente nell'ambiente chroot. Controllare che le impostazioni siano corrette eseguendo un semplice test:

expect -c "spawn ls"

Se compare il seguente messaggio, l'ambiente chroot non è impostato per una corretta operatività corretta PTY:

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

Questo problema deve essere risolto prima di eseguire le suite di test per Binutils e GCC.

La documentazione di Binutils raccomanda di costruire Binutils fuori dalla directory dei sorgenti, in una directory di costruzione dedicata:

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

Preparare Binutils per la compilazione:

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

Compilare il pacchetto:

make tooldir=/usr

Il significato del parametro di make:

tooldir=/usr

Normalmente la tooldir (la directory dove alla fine verranno collocati gli eseguibili) è impostata a $(exec_prefix)/$(target_alias). Per esempio le macchine i686 la espanderanno in /usr/i686-pc-linux-gnu. Poiché questo è un sistema personalizzato, questa directory di destinazione specifica in /usr non è necessaria. $(exec_prefix)/$(target_alias) verrebbe utilizzata se il sistema fosse usato per il cross-compile (per esempio compilare un pacchetto su una macchina Intel che genera codice che può essere eseguito su macchine PowerPC).

[Importante]

Importante

La suite di test per Binutils in questa sezione è considerata critica. Non saltarla per nessuna ragione.

Testare i risultati:

make check

Installare il pacchetto:

make tooldir=/usr install

Installare il file header libiberty che è richiesto da alcuni pacchetti:

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

6.11.2. Contenuti di Binutils

Programmi installati: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings e strip
Librerie installate: libiberty.a, libbfd.{a,so} e libopcodes.{a,so}

Brevi descrizioni

addr2line

Traduce indirizzi di programmi in nomi di file e numeri di linea; dato un indirizzo e il nome di un eseguibile, usa le informazioni di debug nell'eseguibile per determinare quale file sorgente e numero di linea siano associati all'indirizzo

ar

Crea, modifica e estrae da archivi

as

Un assemblatore che assembla l'output di gcc in file oggetto

c++filt

Utilizzato dal linker per decodificare simboli C++ e Java ed evitare che funzioni sovraccaricate crollino

gprof

Mostra i dati del profilo grafico di chiamata

ld

Un linker che combina un certo numero di file oggetto e archivi in un singolo file, riallocando i loro dati e collegando i riferimenti dei simboli

nm

Elenca i simboli occorrenti in un dato file oggetto

objcopy

Utilizzato per tradurre un certo tipo di file oggetto in un altro

objdump

Visualizza informazioni su un dato file oggetto, con opzioni che permettono di controllare quali informazioni evidenziare; l'informazione mostrata è utile ai programmatori che stanno lavorando ai tool di compilazione

ranlib

Genera un indice dei contenui di un archivio e lo memorizza nell'archivio; l'indice elenca tutti i simboli definiti dai membri dell'archivio che sono file oggetto riallocabili

readelf

Mostra informazioni sui binari di tipo ELF

size

Visualizza le dimensioni delle sezioni e la dimensione totale per i file oggetto dati

strings

Emette, per ciascun file dato, la sequenza di caratteri stampabili che siano almeno di una specifica lunghezza (per default è 4); per i file oggetto stampa, per default, solo le stringhe delle sezioni di inizializzazione e caricamento, mentre per altri tipi di file scansiona l'intero file

strip

Elimina i simboli dai file oggetto

libiberty

Contiene routine usate da diversi programmi GNU, inclusi getopt, obstack, strerror, strtol e strtoul

libbfd

La libreria Binary File Descriptor

libopcodes

Una libreria per gestire gli opcodes—le versioni «testo leggibile» delle istruzioni per il processore; è usata per la costruzione di utilità come objdump