2010-09-19 19 views
9

Sono in esecuzione Linux Ubuntu 10.04 e ho una macchina Windows 7 e un MacBook con Mac OS X 10.6.4. Come faccio a scrivere un semplice programma C (come in NON QT!) Come:Cross Platform C?

#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    printf("Hello Linux and Mac and Windows!") 
    return 0; 
} 

per funzionare su tutte le mie macchine, senza dover compilare questo programma su Ubuntu, Windows 7, quindi Mac OS X? Potrei creare questo in Ubuntu e compilarlo per eseguirlo su diversi sistemi operativi?
UPDATE
Non intendo produrre UN binario da eseguire su tutti. Intendo produrre TRE binari dallo stesso codice C nello stesso SO.

+1

possibile duplicato di [Come compilare per OS X in Linux o Windows?] (Http://stackoverflow.com/questions/693952/how-to-compile-for-os-x-in-linux-or- windows) – richq

+0

Io non la penso così. Possiedo già un Mac con OS X. –

+0

Per ottenere risultati affidabili è necessario includere una nuova riga nell'istruzione 'printf()'. –

risposta

11

Un eseguibile ha un formato specifico (ad esempio ELF) e architettura (ad esempio x86). Quindi, devi compilare più volte. Tuttavia, è possibile eseguire una compilazione incrociata ad es. Windows 7 x86 e Mac OS X x86 da Ubuntu. Le procedure per ciascuno sono diverse, come ci si aspetterebbe.

Per Windows, è necessario mingw32. Vedi Compile Windows C console applications in Linux .

Per OS X, vedere How to compile Intel Mac binaries on Linux? , che collega a a tutorial.

È possibile cercare per trovare ulteriori informazioni su ciascuno.

+0

Per il tutorial di OS X, sembra un po 'vecchio. Funzionerà anche con l'iPhone SDK? –

+0

È possibile utilizzare [Cygwin] (http://cygwin.org/) come alternativa a MingW32. –

+0

@ Mohit, non lo so, hai chiesto un MacBook. Per Linux-> iPhone, vedi [ Avvio dello sviluppo di app per iPhone in Linux? ] (http://stackoverflow.com/questions/276907/starting-iphone-app-development-in-linux); non è certamente semplice, però. –

2

Sfortunatamente, i formati di file eseguibili utilizzati da Linux, Windows e OSX sono profondamente diversi nei dettagli. Non c'è modo di produrre un singolo binario che funzioni su tutti e tre.

E è possibile generare file eseguibili di Windows e OSX utilizzando compilatori cross da Linux (o viceversa in qualsiasi altra combinazione che ti piace), ma alla configurazione dell'ambiente di costruzione è probabilmente più problemi di quanto ne vale la pena. Vedi http://www.kegel.com/crosstool/ se vuoi davvero provarlo.

+1

Controllare l'aggiornamento, non intendo creare un binario SINGLE da eseguire su più piattaforme. –