2010-09-19 134 views
9

我正在運行Linux Ubuntu 10.04,我有一臺Windows 7機器和一臺運行Mac OS X 10.6.4的MacBook。我如何寫一個簡單的C程序(如不QT!),如:跨平臺C?

#include <stdio.h> 

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

,而不必編譯在Ubuntu這個程序,那麼Windows 7,然後的Mac OS上我所有的機器上運行X?我可以在Ubuntu中創建它並交叉編譯它以在多個不同的操作系統上運行?
UPDATE
我不是說要生成一個二進制文件來運行所有。我的意思是從同一個OS中的相同C代碼生成三個二進制文件。

+1

可能的重複[如何在Linux或Windows中編譯OS X?](http://stackoverflow.com/questions/693952/how-to-compile-for-os-x-in-linux-or- windows) – richq 2010-09-19 01:32:36

+0

我不這麼認爲。我已經擁有一臺運行OS X的Mac。 – 2010-09-19 01:38:23

+0

您需要在'printf()'語句中包含一個換行符以獲得可靠的輸出。 – 2010-09-19 01:50:24

回答

11

可執行文件具有特定格式(例如ELF)和體系結構(例如x86)。因此,你必須多次編譯。但是,可以交叉編譯成例如來自Ubuntu的Windows 7 x86和Mac OS X x86。正如你所期望的,每個程序都不同。

對於Windows,您需要mingw32。見 Compile Windows C console applications in Linux

對於OS X,請參見 How to compile Intel Mac binaries on Linux? ,鏈接到a tutorial

您可以搜索以查找每個的更多信息。

+0

對於OS X教程,它似乎有點古老。它也適用於iPhone SDK嗎? – 2010-09-19 01:43:55

+0

你可以使用[Cygwin](http://cygwin.org/)作爲MingW32的替代品。 – 2010-09-19 01:52:03

+0

@Mohit,我不知道,你問過關於MacBook。對於Linux-> iPhone,請參閱[ 在Linux中啓動iPhone應用程序開發? ](http://stackoverflow.com/questions/276907/starting-iphone-app-development-in-linux);不過,這當然不是那麼簡單。 – 2010-09-19 01:53:24

2

不幸的是,Linux,Windows和OSX使用的可執行文件格式在細節上有很大不同。沒有辦法產生一個適用於這三者的單個二進制文件。

可能使用來自Linux的交叉編譯器生成Windows和OSX可執行文件(反之亦然,您可以使用任何其他組合),但設置生成環境可能比它的價值更麻煩。如果你真的想試試,請參閱http://www.kegel.com/crosstool/

+1

檢查更新,我不是說要創建一個單一的二進制文件在多個平臺上運行。 – 2010-09-19 01:39:58