5.4. Binutils-2.15.91.0.2 - Passo 1

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

Tempo approssimativo di costruzione: 1.0 SBU

Spazio su disco richiesto: 194 MB

L'installazione di Binutils dipende da: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo

5.4.1. Installazione di Binutils

E' importante che Binutils sia il primo pacchetto compilato, poiché sia Glibc che GCC eseguono diversi test su linker e assembletore disponibili per determinare quale delle loro caratteristiche abilitare.

Questo pacchetto è noto per avere problemi quando i suoi flag di ottimizzazione (incluse le opzioni -march e -mcpu) vengono cambiati. Se è stata definita una qualunque delle variabili ambiente che si sovrapone alle ottimizzazioni di default, come CFLAGS e CXXFLAGS, disallocarle quando si costruisce Binutils.

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

mkdir ../binutils-build
cd ../binutils-build
[Nota]

Nota

Perchè i valori di SBU elencati nel resto del libro siano di qualche utilità, misurare il tempo occorrente a costruire questo pacchetto dalla configurazione, fino a e inclusa la prima installazione. Per ottenere questo facilmente, racchiudere quattro comandi in un comando time in questo modo: time { ./configure ... && ... && ... && make install; }.

Preparare Binutils per la compilazione:

../binutils-2.15.91.0.2/configure --prefix=/tools \
    --disable-nls

Significato delle opzioni di configurazione:

--prefix=/tools

Questo dice allo script di configurazione di prepararsi a installare i programmi delle Binutils nella directory /tools.

--disable-nls

Questo disabilita l'internazionalizzazione. Non è necessaria per i programmi statici, e NLS può causare problemi quando viene linkata staticamente.

Continuare con la compilazione del pacchetto:

make configure-host
make LDFLAGS="-all-static"

Significato dei parametri di make:

configure-host

Questo forza l'immediata configurazione di tutte le sottodirectory. Una costruzione linkata staticamente fallirebbe senza questo. Usare questa opzione per aggirare il problema.

LDFLAGS="-all-static"

Questo dice al linker che tutti i programmi delle Binutils devono essere linkati staticamente. Tuttavia, volendo essere precisi, "-all-static" è passato al programma libtool, che a sua volta passa "-static" al linker.

La compilazione è ora completa. Normalmente ora eseguiremmo la suite di test, ma in questa fase preliminare il framework della suite di test (Tcl, Expect, and DejaGNU) non è ancora al suo posto. I benefici derivanti da un'esecuzione dei test a questo punto sono minimi, poiché i programmi di questo primo passo verranno presto rimpiazzati da quelli del secondo.

Installare il pacchetto:

make install

Quindi, preparare il linker per la successiva fase di “Aggiustamento”:

make -C ld clean
make -C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib

Significato dei parametri di make:

-C ld clean

Questo dice al programma make di rimuovere tutti i file compilati nella sottodirectory ld.

-C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib

Questa opzione ricostruisce ogni cosa nella sottodirectory ld. Specificare la variabile del Makefile LIB_PATH nella linea di comando ci permette di sovrascrivere il valore di default e puntarlo alla locazione temporanea dei tool. Il valore di questa variabile specifica il percorso di ricerca di default della librerie da parte del linker. Questa preparazione viena usata più avanti nel capitolo.

[Avvertimento]

Avvertimento

Non rimuovere ancora le directory di costruzione e dei sorgenti delle Binutils. Esse saranno di nuovo necessarie nel loro stato attuale più avanti in questo capitolo.

Dettagli su questo pacchetto si trovano nella Sezione 6.13.2, “Contenuti di Binutils.”