Risposte:
Come indicato in questo post del blog e accennato nei Termini di configurazione di GCC , --target
si applica solo quando si compilano toolchain. Quando si esegue una normale compilazione incrociata di una libreria o di un binario, si utilizza
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Tuttavia, quando si sta costruendo toolchain, le cose possono diventare più complicate. Penso che quanto segue sia corretto (anche se non posso dire di aver mai compilato manualmente un cross-debugger):
Diciamo che hai:
Dovresti configurare e costruire il tuo server di debug (ad esempio gdbserver) da eseguire sul tuo dispositivo incorporato con
./configure --build=powerpc --host=mips
in modo che tu possa mettere il mastice sul tuo dispositivo incorporato ed eseguire "gdbserver: 1234 a.out" per avviare il debug e ascoltare sulla porta 1234.
Dovresti quindi costruire il tuo client di debug (che si connette e controlla gdbserver) con
./configure --build=powerpc --host=i686 --target=mips
che copieresti sul tuo laptop x86 in modo che nel campo tu possa eseguire "gdbclient embedded.device: 1234" per eseguire il debug del tuo programma a.out.
Tutto ciò si applica anche ai compilatori per i quali potresti voler guardare il collegamento GCC sopra o questa sezione sulla compilazione incrociata canadese .
Si noti inoltre che, in pratica, si potrebbe non vedere build, host o target specificati perché, secondo questa pagina di manuale di Autoconf , "il target predefinito è host, host da compilare e build in base al risultato di config.guess."
In una parola, crea il codice --build
, eseguilo --host
con l' --target
ambiente dell'architettura.
Nota: l' argomento --target
ha senso solo quando si costruisce un compilatore (ad esempio GCC). Quando si esegue configure
prima di creare GCC:
--build
: la macchina su cui stai costruendo--host
: la macchina per cui stai costruendo--target
: la macchina per la quale GCC produrrà il binarioDalla documentazione di GCC ( note di installazione specifiche per host / destinazione ):
Se build, host e target sono tutti uguali, questo viene chiamato nativo. Se build e host sono uguali ma il target è diverso, si parla di cross. Se build, host e target sono tutti diversi, questo viene chiamato canadese (per oscuri motivi si tratta del partito politico canadese e del background della persona che lavorava alla build in quel momento). Se host e destinazione sono uguali, ma build è diversa, stai utilizzando un cross-compilatore per creare un nativo per un sistema diverso. Alcune persone lo chiamano host-x-host, nativo incrociato o nativo incrociato. Se build e target sono uguali, ma l'host è diverso, stai usando un cross compiler per creare un cross compiler che produce codice per la macchina su cui stai costruendo. Questo è raro, quindi non esiste un modo comune per descriverlo. C'è una proposta per chiamare questo un crossback.
--target
non è rilevante per nessun progetto che non sia esso stesso un compilatore. Allora perché è un'opzione di configurazione standard? Confondere.
configure
non è esattamente l'apice del design buono e pulito; Immagino sia solo il risultato dello scorrimento delle funzionalità specifiche dell'applicazione.
--host
e--build
. Ho due progetti C ++ ed è impossibile crearlo per Android perché Autotools è così fottuto. Insiste sull'esecuzione di test utilizzando la toolchain dell'host.