Il me semble:
Compilateur natif => Compile d'une architecture+système d'exploitation, pour cette même architecture+système d'exploitation. (exemple: intel x86+windows=>intel x86+windows).
Cross-Compiler (pas sûr du terme français): compiler d'une architecture+systeme d'exploitation vers une autre architecture+système d'exploitation (ex: intel x86+linux=>ARM+PalmOS)
voilà, ensuite il y a la compilation qui est pour la configuration utilisée (donc pas cross compiler), mais qui n'est pas du code natif (comme le byte code du Java). Je ne sais pas vraiment comment ça s'appelle.
sinon les compilateurs croisés sont très utilisés pour les machines embarquées (qui ne pourraient pas supporter une compilation ).