跨平台的C语言?

14

我正在运行Linux Ubuntu 10.04,我有一台运行Windows 7的机器和一台运行Mac OS X 10.6.4的MacBook。我该如何编写一个简单的C程序(不使用QT)例如:

#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上创建此程序并跨平台编译以在多个操作系统上运行?
更新
我不是指生成一个二进制文件在所有操作系统上都可以运行。我是指从相同的C代码中在同一操作系统上生成三个不同版本的二进制文件。


1
可能是如何在Linux或Windows上为OS X编译?的重复问题。 - richq
我不这么认为。我已经拥有一台运行OS X的Mac电脑了。 - Mohit Deshpande
你需要在 printf() 语句中包含换行符以获得可靠的输出。 - Jonathan Leffler
答案的主要部分在于选择编写程序的方式。了解每个平台的标准和API。确定如何适应源代码以使用通用的API。当本地没有常见功能时,确定如何解决问题。我的大多数程序在Unix、Linux、MacOS X和Cygwin上编译都没有太大问题——除非它们正在执行某些平台不支持的操作。 - Jonathan Leffler
1
具体来说,“我能在Ubuntu上创建这个并交叉编译它以在多个不同的操作系统上运行吗?” 这里是你复制了“如何在Linux或Windows上为OS X编译?” 重复的问题并不是坏事。 - Roger Pate
请注意,对于只能与C ++而非C一起使用的qt(跨平台应用程序框架),您必须执行相同的操作(交叉编译)。Qt提供跨平台API而非特定于某个平台的API,并使用跨平台makefile,从而帮助您实现这一目标。 - Roman A. Taycher
3个回答

14
一个可执行文件有特定的格式(例如ELF)和架构(例如x86)。因此,您确实需要多次编译。但是,可以从Ubuntu交叉编译到Windows 7 x86和Mac OS X x86等平台。每个平台的过程都不同,正如您所期望的那样。
对于Windows,您需要使用mingw32。请参见在Linux中编译Windows C控制台应用程序
对于OS X,请参见如何在Linux上编译Intel Mac二进制文件?,其中链接到a tutorial
您可以搜索以查找更多信息。

对于OS X教程,它似乎有点过时了。它也适用于iPhone SDK吗? - Mohit Deshpande
@Mohit,我不知道你问的是MacBook。如果想在Linux上开发iPhone应用程序,请参考在Linux上开始iPhone应用程序开发?;虽然这并不简单。 - Matthew Flaschen

3

很不幸,Linux、Windows和OSX使用的可执行文件格式在细节上有根本的不同。没有办法制作一个适用于所有三个操作系统的单一二进制文件。

使用交叉编译器从Linux生成Windows和OSX可执行文件是可能的(或者以任何其他组合方式),但是设置构建环境可能比它值得的麻烦多了。如果你真的想尝试,请参见http://www.kegel.com/crosstool/


2
请检查更新,我并不是要创建一个单一的二进制文件以在多个平台上运行。 - Mohit Deshpande

0

那是一个闭源库,可能会限制使用。 - Jonathan E. Landrum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接