Dettagli su questo pacchetto si trovano nella Sezione 6.13.2, “Contenuti di Binutils.”
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
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
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:
Questo dice allo script di configurazione di prepararsi a installare i programmi delle Binutils nella directory /tools.
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:
Questo forza l'immediata configurazione di tutte le sottodirectory. Una costruzione linkata staticamente fallirebbe senza questo. Usare questa opzione per aggirare il problema.
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:
Questo dice al programma make di rimuovere tutti i file compilati nella sottodirectory ld.
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.
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.”