Cross-compilazione
# Cross-compilazione

La cross-compilazione è la tecnica mediante la quale si compila un codice sorgente con un cross-compilatore, ottenendo così un file binario eseguibile su di un elaboratore con architettura diversa da quella della macchina su cui si è lanciato il cross-compilatore stesso. La cross-compilazione viene usata anche quando è necessario compilare un programma per un sistema operativo differente dalla macchina su cui si trova il compilatore e linker. La macchina che esegue il cross-compilatore viene detta host mentre la macchina sulla quale si eseguirà il binario ottenuto dal processo di cross-compilazione è detta target.

## Usi

### Sistemi Embedded

Questa tecnica è usata solitamente per compilare applicazioni per sistemi embedded dove le risorse sono generalmente molto limitate e non sarebbe quindi possibile effettuare la normale compilazione. Inoltre molti sistemi embedded, come i microcontrollori, non possiedono nessun sistema operativo ad eccezione di un piccolo BIOS, pertanto non è possibile eseguire nessun compilatore o linker su questi dispositivi.

### Sistemi di grandi dimensioni

In una grande azienda o in una server farm che possiede un gruppo non omogeneo di piattaforme hardware e/o software si rende necessaria la tecnica della cross-compilazione quando deve essere distribuito un nuovo software, soprattutto nel caso dell'utilizzo di sistemi operativi differenti.

### Nuovi software di base

Le operazioni di scrittura, compilazione e link di nuovi sistemi operativi devono essere necessariamente effettuate su altri sistemi preesistenti per poterlo salvare su un supporto di memorizzazione esterno, dopo aver generato il codice oggetto, con un file system leggibile dal BIOS e poter quindi avviare almeno il primo abbozzo del nuovo sistema operativo, che supporti la compilazione e il linking.

## Cross Compilers GNU

Per una cross-compilazione di base con i tool del progetto GNU è necessario avere una toolchain completa di cross-compilatore e delle binutils più la glibc, questi ultimi compilati anch'essi per generare codice per il target. Nel caso invece che si vogliano compilare applicazioni più complesse, come le applicazioni grafiche o che necessitano comunque di particolari librerie extra, è necessario aggiungere alla propria toolchain anche queste librerie preventivamente cross-compilate.

