2011-04-25 104 views
4

我该如何编写一个在Windows 7,Mac OS X(也可能是Linux)上运行的程序?编写一个跨平台的程序

我听说Qt是构建跨平台GUI的好框架,但我认为每个程序版本都需要重新编译,是不是正确?我应该编译windows下的win版本,mac os x下的mac版本,linux下的linux版本等等?

我收到的想法和/或建议

+0

看看这个类似的问题http://stackoverflow.com/questions/5759487/cross-platform-windows-os-x-development-with-large-existing-code-base/5759702#comment-6595156 – nathan 2011-04-25 15:10:31

回答

5

底层的二进制格式是每个平台上的不同,所以,除非您使用的是虚拟机(如Java或Flash一样),你将不得不重新编译程序在每个平台上。

一些编译器(比如GCC)允许交叉编译,但它不是微不足道的设置。可能是最容易交叉编译的系统是Linux(有几个开源项目从Linux到Windows设置了交叉编译)。

在GUI应用程序的情况下,它取决于语言 - 如果你坚持使用C++,Qt或wxWindows可能是一个合理的选择,提供了本地窗口系统上的抽象层。

如果您可以使用Java,它会使生活更简单,但窗口系统是Java的,而不是本地的。

另一种需要思考的语言是FreePascal w/Lazarus - 它具有相当不错的GUI设计器,可编译到每个平台上的本机窗口系统(Windows上的WinAPI,OSX上的Cocoa和Linux上的GTK)。

+0

无论如何编译一个Qt应用程序不能使它适用于每个操作系统?我只是可以重用源代码(也许),但我需要不同的exe/dmg/etcs ...对不对? – 2011-04-25 15:08:37

+3

另外一个用于投掷wxWidgets。 – nathan 2011-04-25 15:09:37

+1

@Paul,是的,你需要为每个操作系统重新编译它。 – 2011-04-25 15:11:40

1

的Java在Windows,Mac OS X和Linux上运行

+0

本地编译我只是不喜欢它,但你的答案确实是一个很好的答案 – 2011-04-25 15:06:31

2

是的,你需要使用C++时编译一个版本。

阻止你编译程序的唯一方法,例如,在Mac上的Windows就是为了获得一个工具。这是可能的,但问题在于找到工具集。

此外,您可以使用虚拟机运行不同的操作系统并编译同一台计算机上所有平台的代码。

3

不确定是否必须使用C++,但Adobe Air是一款优秀的跨平台桌面开发环境,并且其在移动开发领域的应用也在不断增长。如果您需要使用Adobe Air部署到多个桌面操作系统的主要应用程序的示例,请查看tweetdeck http://www.tweetdeck.com/

我强烈建议您也查看Flex和Flash Builder,如果您转到该路线。

+0

我看看吧,谢谢 – 2011-04-25 15:06:55

3

在编写跨平台程序时,我会强调两个独立的问题 - 如何使代码具有可移植性,以及如何安排它在各种不同的平台上构建。至于事情的建设方面,我会考虑像CMake(http://www.cmake.org)这样的跨平台构建系统。你基本上写了一个脚本,CMake会为特定的平台生成适当的项目文件/ makefile。然后,您可以像平常一样在每个平台上构建您的程序。例如,在Windows上,可以使用CMake为您生成一个Visual C++项目,然后使用Visual C++实际构建您的可执行文件。在Linux上,您可以使用CMake生成一个makefile,然后使用g ++编译可执行文件。

另一方面是如何使代码可移植 - 关键是编写符合C++标准的代码,并利用本身可以移植到您感兴趣的平台上的库。您可以(也可以有时需要)编写特定于平台的代码为每个不同的平台 - 如果你这样做,你应该把它隐藏的便携式接口后面,并让代码使用的是休息。

+0

谢谢cmake的似乎是一个不错如果使用所有平台的标准代码进行编程也很困难我认为C会是一个好方法或者C++(在Win32和MacOsX和Linux上支持) – 2011-04-25 17:32:47