[Gfoss] Compilatore C per massima compatibilità tra Win e Linux

a.furieri a lqt.it a.furieri a lqt.it
Lun 24 Giu 2013 10:16:38 CEST


On Mon, 24 Jun 2013 07:08:04 +0200, Andrea Peri wrote:
> Salve,
>
> Devo sviluppare alcune CGI.
> Le quali sono destinate a essere eseguite su piattaforma linux.
>
> Cio' nonostante, per svolgere questo compito di sviluppo, mi torna
> piu' pratico
>  lavorare su windows e poi trasferire il sorgente su linux solo per 
> la
> compilazione finale quando tutto è posto.
>
> Per tenere tutto molto semplice, non prevedo di usare neanche sistemi
> di supporto alla compilazione quali cmake e make.
>
> Mi chiedevo se per garantirmi la massima compatibilità tra lo
> sviluppo su windows e la produzione su linux sia meglio utilizzare
>  cygwin oppure mingw .
>

Ciao Andrea,

possiamo riassumere la situazione in questo modo:

- su Linux di fatto esiste un unico compilatore C/C++, cioe' GCC
   inoltre esistono svariati strumenti standard di supporto come
   MAKE, AUTOMAKE oppure CMAKE: complessivamente hai un ricchissimo
   set di strumenti che rendono molto semplice (e molto robusto)
   fare sviluppo in modo facilmente portabile, anche cross-platform.
   inoltre quasi tutte le distro di GCC per Linux funzionanon anche
   come cross-compilers: quindi puoi fare la build di eseguibili
   binari per Windows perfettamente funzionanti direttamente su
   Linux (si, e' realta', non e' fantascienza)

GCC (e tutti i relativi strumenti di supporto) sono disponibili
anche su Windows, ma in due "salse" differenti:

- Cygwin e' abbastanza "vecchierello", esiste da oltre 15 anni;
   in pratica e' quasi un intero sistema operativo, che ha lo scopo
   di mettere a disposizione anche sotto Windows un ambiente standard
   POSIX assolutamente completo.
   insomma, se usi Cygwin e' quasi come se tu stessi usando una
   piattaforma strettamente Linux-like appoggiata su Windows

- MinGW e' molto piu' recente, ed e' semplicemente un derivato
   evoluto di Cygwin.
   non pretende affatto di supportare tutto POSIX completo, ed
   invece preferisce appoggiarsi direttamente sulle librerie di
   sistema Microsoft.
   ne risulta un sistema un po' meno portabile (le API MS non
   sono POSIX, ed in alcuni casi divergono anche fortemente),
   ma molto piu' leggero (non e' necessario installare un intero
   sistema operativo aggiuntivo, ma solo alcuni componenti base).

ne deriva una differenza fondamentale a run-time:
- un eseguibile binario compilato da MinGW e' virtualmente
   indistinguibile da qualsiasi altro eseguibile compilato
   usando il sistema di sviluppo nativo Microsoft (MSVC)
- al contrario, tutti gli eseguibili compilati da Cygwin
   richiedono anche a run-time il supporto di emulazione
   POSIX; dato che questo e' disponibile solo sotto licenza
   GPL, ne potrebbero derivare grossi problemi legali per la
   redistribuzione se il codice della tua app usa una licenza
   non compatibile con la GPL.
   ed in ogni caso installare sw generato con Cygwin e' sempre
   piu' rognoso e complesso che installare sw generato da MinGW

ma ne derivano anche conseguenze per lo stile di sviluppo
del codice:
- se usi Cygwin il codice dovrebbe essere virtualmente
   identico sia per Linux che per Cygwin
- se usi MinGW invece e' praticamente inevitabile che qua e la
   occorra definire qualche macro condizionale:
   #ifdef .. #else ... #endif
   in qualche caso (abbastanza raro) potresti anche essere
   costretto a scrivere pezzi di codice lunghi e complessi
   per aggirare alcune limitazioni intrinseche di Windows.

conclusione:
in genere per sviluppi professionali si preferisce usare
sempre MinGW piuttosto che Cygwin.
se non altro perche' rende molto piu' semplice installare
il sw prodotto.
ma anche perche' non appesantisce la configurazione di
runtime: a volte l'emulazione POSIX richiesta da Cygwin
potrebbe anche introdurre dei colli di bottiglia penalizzanti
per le prestazioni complessive.

ma se non capisco male, invece a te interessa piu' che altro
una "piattaforma personale" da usare solo durante lo sviluppo
per mettere a punto il codice che poi farai girare su Linux.
possibilmente in modo tale da minimizzare le differenze tra
le due piattaforme.
allora forse in questo caso Cygwin e' la soluzione piu' adatta
per i tuoi scopi.

ciao Sandro







-- 
Il messaggio e' stato analizzato alla ricerca di virus o
contenuti pericolosi da MailScanner, ed e'
risultato non infetto.



Maggiori informazioni sulla lista Gfoss