Da scheint ein Missverständnis vorzuliegen.
Ein Cross-Compiler ist ein Compiler, der auf Betriebssystem A läuft und
ein EXE für Betriebssystemm B erzeugt. Dieses B-EXE ist in der Regel
nicht auf A ausführbar.
Das liegt schon alleine daran, dass es unzählige Möglichkeiten gibt, wie
man die Kommunikation eines Programms mit dem BS (das sog. API)
implementieren kann. Und immer dann, wenn es mehrere Möglichkeiten gibt,
kann man davon auch ausgehen, dass sie alle von irgendjemanden benutzt
werden. C abstrahiert davon ein gemeinsames Subset und verlagert die
Details in die Runtime Library. Aber nur weil man diese Details so nicht
mehr sieht, heißt das nicht, dass sie nicht mehr existent sind.
Man kann mit einem Cross-Compiler das System A benutzen um damit ein EXE
für System B zu erzeugen. Das kann zb dann sinnvoll sein, wenn man auf A
eine wesentlich bessere Entwicklungsumgebung zur Verfügung hat, als es
auf B jemals möglich sein wird. Oder aber in der Bootstrap-Phase, wenn
die Systemumgebung auf B das erste mal hochgezogen wird. Anstatt auf
niedrigsten Byte-Level arbeitet man dann mit einem komfortablen
Editor/Entwicklungswerkzeugen auf A.