编写跨平台程序

时间:2011-04-25 14:58:57

标签: c++ windows macos cross-platform cross-compiling

我怎么能编写一个在Windows 7,Mac OS X(也可能是linux)上运行的程序?

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

我正在获得想法和/或建议

5 个答案:

答案 0 :(得分:5)

每个平台上的底层二进制格式都不同,所以除非你使用虚拟机(比如Java或Flash),否则你必须在每个平台上重新编译你的程序。

某些编译器(如GCC)允许交叉编译,但设置起来并非易事。可能最简单的交叉编译系统是Linux(有几个开源项目从Linux到Windows进行交叉编译)。

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

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

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

答案 1 :(得分:3)

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

如果你走这条路,我强烈建议你研究一下Flex和Flash Builder。

答案 2 :(得分:3)

在编写跨平台程序时,我会强调两个独立的问题 - 如何使代码可移植,以及如何安排在不同的平台上构建代码。

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

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

答案 3 :(得分:2)

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

唯一阻止你编译程序的东西,例如Mac上的Windows就是获得这样做的工具。这是可能的,但问题是找到工具集。

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

答案 4 :(得分:1)

Java在Windows,OS X和Linux上运行