Binutils-2.14 - Passo 1

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

Tempo approssimativo di costruzione:  1.0 SBU
Spazio necessario sul disco:     170 MB

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

Installazione di Binutils

È importante che Binutils sia il primo pacchetto che viene compilato, poiché sia Glibc che GCC eseguono diversi test sul linker e sull'assemblatore disponibili per determinare quale delle loro caratteristiche abilitare.

Questo pacchetto è noto per avere problemi quando vengono cambiati i suoi flag di ottimizzazione di default (incluse le opzioni -march e -mcpu). Pertanto, se doveste aver definito variabili di ambiente che disabilitano le nostre ottimizzazioni di default, come i flag CFLAGS e CXXFLAGS, raccomandiamo di eliminarle quando costruite Binutils.

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

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

Nota

Se volete che i valori degli SBU elencati nel resto del libro siano di qualche utilità, dovrete misurare il tempo impiegato a costruire questo pacchetto, partendo dalla configurazione e includendo la prima installazione. Per realizzare facilmente questo, potete racchiudere i quattro comandi in un comando time come questo: time { ./configure ... && ... && ... && make install; }.

Ora preparate Binutils per la compilazione:

../binutils-2.14/configure --prefix=/tools --disable-nls

Il significato delle opzioni di configurazione:

  • --prefix=/tools: questo dice allo script di configurazione di prepararsi a installare i programmi di Binutils nella directory /tools.

  • --disable-nls: questo disabilita l'internazionalizzazione (parola spesso abbreviata con i18n). Non ne abbiamo bisogno per i nostri programmi statici e nls spesso causa problemi quando viene linkato staticamente.

Proseguite con la compilazione del pacchetto:

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

Il significato dei parametri di make:

  • configure-host: questo forza l'immediata configurazione di tutte le sottodirectory. Una costruzione linkata staticamente fallirebbe senza questo. Perciò usiamo questa opzione per aggirare il problema.

  • LDFLAGS="-all-static": questo dice al linker che tutti i programmi di Binutils devono essere linkati staticamente. Tuttavia, parlando letteralmente, "-all-static" è passato al programma libtool, che, quindi, passa "-static" al linker.

La compilazione è completa. Normalmente ora avvieremmo la suite di test, ma in questa fase preliminare il framework della suite di test (Tcl, Expect e DejaGnu) non è ancora in pista. E comunque avremmo uno scarso vantaggio avviando ora i test, poiché i programmi di questa prima fase saranno presto rimpiazzati da quelli della seconda.

Ora installate il pacchetto:

make install

Ora preparate il linker per la fase di “Regolazione” successiva:

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

Il 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 sovrapporci ai valori di default e farlo puntare alla nostra locazione temporanea degli strumenti. Il valore di questa variabile specifica il percorso di ricerca predefinito da parte del linker. Vedrete come viene utilizzata questa preparazione più avanti in questo capitolo.

[Warning]

Attenzione

Non rimuovete le directory dei sorgenti e di costruzione di Binutils. Ne avrete di nuovo bisogno nel loro stato attuale un po' più avanti in questo capitolo.

I dettagli su questo pacchetto si trovano nella sezione chiamata “Contenuti di Binutils”.