Newsgroup: it.comp.programmare
Titolo: Programmare su un sistema X applicazione per un sistema Y

Salve,
avrei delle domande da porvi:
1) E' possibile sviluppare un'applicazione per Linux ad es. programmando su
Windows 98? In teoria, sarebbe possibile compilare il sorgente per poi
eseguirlo esclusivamente su Linux (tutto questo vale anche da Linux a
Windows)?
2) Se ciň non č possibile in quanto un compilatore per un OS puň generare
solo un tipo di codice macchina, come si fa a scrivere il primo compilatore
per un sistema operativo?
Grazie
--
Artwork

 che 
trovate sul newsgroup it.news.votazioni.

 Windows 98?
Prima specifica il linguaggio di programmazione che intendi, e poi se ne 
puo` riparlare con calma.
La scelta (di linguaggi) e` vasta, le possibilita` son tante.
-- 
   |   \    \  | ___|_  |_  | ianezz a casa sua... :-)
   |  _ \  | \ | _|    /   /  Visita il LinuxTrent a
  _|_/  _\_|  _|____|___|___| 
http://www.linuxtrent.it

C++

 C++
Ok.
Effettuare il build di un progetto C++ su una piattaforma diversa da 
quella che ospita compilatore e toolchain relativa non e` proprio 
immediato:
1) occorre che il compilatore sia un cross-compilatore (i.e. funziona 
sulla piattaforma X ma produce eseguibili per la piattaforma Y, dove 
entrambe le piattaforme possono avere ad esempio la stessa architettura 
(x86) ma formati binari diversi (ELF, COFF e varianti));
2) occorre avere anche il resto della toolchain che sia cross-compilata 
per funzionare su X ma maneggiare binari per Y.
3) occorre avere ovviamente anche TUTTE le dipendenze cross-compilate, 
altrimenti il tuo programma non linka.
4) E per testarlo, ovviamente, devi spostarlo sulla piattaforma target, 
visto che su quella dove fai la build non puoi generalmente farlo 
funzionare cosi` com'e`.
Ora: il GCC e` sicuramente il piu` noto dei cross-compilatori, e si puo` 
compilare in modo che la piattaforma per cui produce eseguibili sia 
diversa dalla piattaforma su cui e` in funzione.
Qui vedi un esempio di come cross-buildare il DJGPP in modo da produrre 
eseguibili per Windows
http://www.delorie.com/howto/djgpp/linux-x-djgpp-revised.html
Il contrario dovrebbe essere possibile sulla carta (quantomeno in un 
ambiente tipo il Cygwin), ma non ho mai sentito di nessuno che 
cross-compilasse da Windows x86 a Linux x86 (mentre del contrario trovi 
diverse storie in rete).
Insomma: meglio avere una buona ragione per cross-buildare progetti in 
C/C++, come ad esempio in caso un nuovo OS che non e` ancora in grado di 
reggersi in piedi per supportare un ambiente di build, o una nuova 
architettura.
Se i motivi invece son fesserie del tipo "non ci funziona il mio editor 
preferito", la soluzione e` ovvia (usare un filesystem di rete) e la 
cross-compilazione non centra un tubo.


 (x86) ma formati binari diversi (ELF, COFF e varianti));
Ma se ad es. scrivo un sistema operativo, come faccio ad informare il GCC di
generare codice macchina per il mio OS? Che differenza c'è tra ELF, COFF,
etc...? Su che base si sceglie il formato binario del OS che si scrive?
Grazie

 etc...?
Sono diversi formati per i file eseguibili.
Per ELF vedi qui:
http://www.skyfree.org/linux/references/ELF_Format.pdf
Per COFF, vedi qui:
http://users.win.be/W0005997/GI/COFF/coff.html
