6.13. Binutils-2.15.94.0.2.2

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

Tempo approssimativo di costruzione: 1.3 SBU
Spazio su disco richiesto: 158 MB
L'installazione dipende da: Bash, Bison, Coreutils, Diffutils, Flex, GCC, Gettext, Glibc, Grep, M4, Make, Perl, Sed e Texinfo

6.13.1. Installazione di Binutils

Questo pacchetto è noto per avere problemi quando vengono cambiati i suoi flag di ottimizzazione di default (incluse le opzioni -march e -mcpu). Pertanto, se dovessero essere state definite variabili di ambiente che disabilitano le nostre ottimizzazioni di default, come i flag CFLAGS e CXXFLAGS, si raccomanda di eliminarle quando si costruisce 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 correttamente per i 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 dedicata:

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

Preparare Binutils per la compilazione:

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

Compilare il pacchetto:

make tooldir=/usr

Normalmente la tooldir (la directory dove finiscono 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 target-specific in /usr non è necessaria. $(exec_prefix)/$(target_alias) verrebbe usata 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 test suite per Binutils in questa sezione è considerata critica. Il nostro consiglio è di 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.15.94.0.2.2/include/libiberty.h /usr/include

6.13.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 nome e indirizzo di un eseguibile, usa le informazioni di debug nell'eseguibile per capire quale file sorgente e numero di linea sono associati con l'indirizzo.

ar

Crea, modifica ed estrae da archivi. Un archivio è un singolo file che contiene una collezione di altri file in una struttura che rende possibile ritrovare i singoli file originari (chiamati membri dell'archivio).

as

Un assemblatore. 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 di solito è utile solo 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. 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.