Domanda Risolto Compilazione dei programmi da parte del compilatore

giovy2707

Utente Electrum
27 Giugno 2019
96
38
62
103
Da quanto so il compilatore traduce i programmi in assembly e poi l'assembler traduce il tutto in binario, ma se i processori hanno generalmente architetture diverse da famiglia a famiglia allora anche l'assembly cambia, quindi come fanno i programmatori a distribuire i loro programmi compilati in modo che siano eseguibili su tutte le piattaforme ad esempio a 64bit?

Per esempio io ho un programma e mettiamo io voglia sia eseguibile su tutti i sistemi x64, come faccio a distribuire questo programma per tutte le piattaforme x64?

Se l'assembly cambia da architettura ad architettura come è possibile che un programma compilato sul mio computer sia poi eseguibile da migliaia di altri computer con magari processori completamente diversi dal mio?
 
Se le architetture target sono diverse, compilerai il programma multiple volte, e distribuirai vari compilati.

Avrai per esempio il binario amd64, quello i386, quello armhf, e via così
 
Ultima modifica:
amd64 è quello per i processori a 64 bit no? Ma non tutti i processori a 64 bit hanno la stessa architettura... Eppure di solito chi pubblica i propri programmi compilati per 64 bit di solito mette a disposizione la versione amd64
Messaggio unito automaticamente:

Come non detto ho fatto qualche ricerca e AMD64 è comune tutti i processori a 64 bit😅
 
Da quanto so il compilatore traduce i programmi in assembly e poi l'assembler traduce il tutto in binario, ma se i processori hanno generalmente architetture diverse da famiglia a famiglia allora anche l'assembly cambia, quindi come fanno i programmatori a distribuire i loro programmi compilati in modo che siano eseguibili su tutte le piattaforme ad esempio a 64bit?
Non puoi farlo, in generale il codice compilato in nativo è dipendente sia dall'architettura della CPU che dal sistema operativo. La dipendenza verso il sistema operativo è principalmente dovuta alle syscall. Se vuoi distribuire il tuo software su diverse architetture e su diversi sistemi operativi, devi ricompilarlo per ogni singola architettura. Quando leggi di un software che può essere scaricato sia in versione 32 bit che in versione 64 bit solitamente intendono rispettivamente x86 (32 bit) e x86_64 (64 bit), che sarebbero le due architetture comunemente usate nei pc. Se il tuo computer è un arm a 64 bit (e.g., un chromebook) dovrà avere un software compilato apposta per quell'architettura, non puoi usare un software compilato per x86_64. Per esempio, nella la pagina di download di 7zip hai una sfilza di versioni diverse: windows x86, windows x86_64, windows arm64, linux x86, linux x86_64, linux arm64, linux arm32, e molte altre. Alcune architetture sono (retro)compatibili, per esempio x86_64 è una versione migliorata di x86 e un processore x86_64 può eseguire codice x86. Se le architetture non sono compatibili, come per esempio arm64 e x86_64, che sono comunque due architetture a 64 bit, devi usare un emulatore.

Come non detto ho fatto qualche ricerca e AMD64 è comune tutti i processori a 64 bit😅
AMD64, x64, x86-64 e x86_64 sono nomi per la stessa architettura. Per capirci, è un po' come dire PS5 e Playstation 5: sono la stessa identica cosa. Non tutti i processori a 64 bit sono x86_64. Per esempio, il tuo cellulare molto probabilmente ha un processore arm a 64 bit che non è compatibile con x86_64.