编写一个跨平台程序

4

如何编写在Windows 7、Mac OS X(或者可能是Linux)上都能运行的程序?

我听说Qt是一个很好的跨平台GUI框架,但是我认为每个程序版本都需要重新编译,对吗?而且,我应该在Windows下编译win版本,在Mac OS X下编译mac版本,在Linux下编译linux版本等等吗?

我正在寻找想法和/或建议。


查看类似的问题,请访问:http://stackoverflow.com/questions/5759487/cross-platform-windows-os-x-development-with-large-existing-code-base/5759702#comment-6595156 - nathan
5个回答

5
每个平台的底层二进制格式都不同,所以除非您使用虚拟机(像Java或Flash一样),否则您必须在每个平台上重新编译程序。有些编译器(例如GCC)允许交叉编译,但设置起来并不容易。可能最容易进行交叉编译的系统是Linux(有几个开源项目从Linux到Windows进行了交叉编译的设置)。
对于GUI应用程序,这取决于语言 - 如果您只能使用C ++,Qt或wxWindows可能是一个合理的选择,提供一个抽象层覆盖原生窗口系统。如果您可以使用Java,则会简化生活,但窗口系统是Java的而不是本地的。
另一个需要考虑的语言是FreePascal w / Lazarus-它具有相当不错的GUI设计器,可编译为每个平台上的本地窗口系统(在Windows上是WinAPI,在OSX上是Cocoa,在Linux上是GTK)。

无论如何,编译Qt应用程序并不能使其在每个操作系统上都能正常工作,对吧?我只能重复使用源代码(也许),但我需要不同的exe/dmg/等等... 对吧? - Marco A.
3
加一分是因为加入了wxWidgets。 - nathan
1
@Paul,是的,你需要为每个操作系统重新编译它。 - Kornel Kisielewicz
不要忘记你可以使用Java的SWT。它具有本地小部件,并且只需要为每个平台重新打包正确的JAR文件(但比重新编译要容易得多)。 - WhyNotHugo
如果有人想在多个平台上进行本地编译,建议使用CMake。 - Marco A.

4

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

如果您选择这条路线,我强烈建议您还要了解Flex和Flash Builder。


自2011年12月起,TweetDeck已经放弃了Adobe AIR代码库:https://en.wikipedia.org/wiki/TweetDeck - Prid

3

当编写跨平台程序时,我要强调两个不同的问题——如何使您的代码可移植以及如何安排在各种不同平台上进行构建。

就构建方面而言,我会研究像CMake(http://www.cmake.org)这样的跨平台构建系统。您只需编写一个脚本,CMake将为特定平台生成适当的项目文件/ makefile。然后您可以像通常一样在每个平台上构建您的程序。例如,在Windows上,您可以使用CMake为您生成Visual C++项目,然后使用Visual C++实际构建可执行文件。在Linux上,您可以使用CMake生成一个makefile,然后使用g++构建可执行文件。

另一个方面是如何使您的代码可移植——关键是编写符合C++标准的代码并利用那些在您感兴趣的各种平台上都可以移植的库。您可以(有时可能需要)为每个不同的平台编写特定于该平台的代码——如果这样做,您应该将其隐藏在便携式接口背后,并让其他代码使用它。


谢谢,如果使用标准代码在所有平台上进行编程很困难,cmake似乎也是一种不错的方式。我认为C语言或C++语言会是一个好的选择(支持Win32、MacOsX和Linux)。 - Marco A.

2

是的,在使用C++时,您需要为每个版本编译。

唯一阻止您在Mac上编译例如Windows程序的事情是获取用于此操作的工具。这是可能的,但问题在于找到工具集。

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


1

Java 可以在 Windows、OS X 和 Linux 上运行


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