构建跨平台应用程序的最简单方法

时间:2011-01-24 09:17:32

标签: c++ cross-platform

我已经阅读了跨平台标签中的一些文章。然而,当我开始一个新的应用程序(主要是终端/控制台应用程序)时,我想知道最简单的跨平台方式(即适用于Linux,Mac OS X和Windows)。我考虑过以下几点:

  • 在我的代码中添加各种宏/标记,为每个操作系统构建不同的二进制可执行文件
  • 使用Qt平台开发跨功能应用程序(虽然GUI和平台组件会增加更多开发时间,因为我不熟悉Qt)

你的想法?在此先感谢您的贡献!

编辑:听起来有很多关于Java和Qt的热门回复。我们在这两者之间有什么权衡?

7 个答案:

答案 0 :(得分:18)

不要走第一条路。您将遇到许多已经通过众多工具解决的问题。

如果您绝对需要C ++,Qt是一个很好的选择。实际上,即使您不熟悉它也会加快开发速度,因为它具有出色的文档并且易于使用。关于它的好处是它不仅仅是一个GUI框架,还有网络,XML,I / O以及许多其他你可能需要的东西。

如果没有必要的C ++,我会选择Java。对于大多数应用程序来说,C ++是太低级别的语言。调试内存管理和损坏的堆栈可能是一场噩梦。

致编辑问题:

  • 显而易见的一个:Java有垃圾收集,C ++没有。这意味着Java中没有内存泄漏(除非你计算JVM中可能存在的错误),不必担心悬空指针等。
  • 另一个显而易见的问题:使用#ifdefs在C ++中使用与平台相关的代码非常容易。在Java中,这是一个真正的痛苦。有JNI,但根本不容易使用。
  • Java对异常有非常广泛的支持。虽然C ++也有异常,但Qt不使用它们,而且在Java中产生异常的一些东西会让你在C ++中出现损坏的内存和崩溃(想想缓冲区溢出)。
  • “写一次,到处跑。”为许多平台重新编译C ++程序可能令人生畏。 Java程序不需要重新编译。
  • 这是有争议的,但我认为Java有更广泛和明确定义的库。抽象级别通常更高,接口更干净。它支持更多有用的东西,比如XML模式等。我想不出Qt中存在的一个特性,但在Java中却没有。也许多媒体或其他什么,我不确定。
  • 现在这两种语言都非常快,因此性能通常不是问题,但Java可能是一种真正的记忆。在现代硬件上也不是非常重要,但仍然如此。
  • 最不明显的一个:C ++比Java更具可移植性。一个例子是FreeBSD OS,它在前一段时间对Java的支持很差(不知道是否仍然如此)。 C ++ / Qt在那里工作得很好。如果您计划支持各种Unix系统,C ++可能是更好的选择。

答案 1 :(得分:5)

使用Java。尽可能多的抨击,它是让任何平台上的东西工作的最好的事情。当然,您仍然需要处理您可能正在使用的外部操作系统相关功能,但它比使用其他任何功能要好得多。

除了Java,你可以在JVM上运行一些东西--JRuby,Jython,Scala可以想到。

您也可以直接使用脚本语言编写(Ruby,Python等)。

C / C ++最适合需要完全内存控制和高可控性的应用程序。

答案 2 :(得分:4)

我选择QT(或其他一些框架)选项。如果你选择了第一个,你会发现它更难。毕竟,您必须知道要针对您所定位的所有平台的各种条件编译部分。

答案 3 :(得分:3)

我建议使用专为跨平台应用程序开发而设计的技术。以下是我所知道的两种技术 - 只要您阅读文档并正确使用这些功能 - 您就可以构建应用程序以在所有3个平台上运行:

当然,总有网络。我主要使用Web应用程序,不仅仅是因为它们的可移植性,还因为它们可以在我的Windows PC,Ubuntu计算机和Mac上运行。

我们主要构建Web应用程序,因为Web是未来。本地应用程序在我的组织中被视为大部分已过时,除非当然有一些网站尚未支持的功能或技术使该应用程序无法完全基于Web。

答案 4 :(得分:2)

如果您正在制作控制台应用程序,如果您坚持使用POSIX库中定义的功能,则应该能够为所有三个平台使用相同的源。设置构建环境是最复杂的部分,特别是如果您希望能够在同一源代码树中构建多个平台。

答案 5 :(得分:2)

我想说如果你真的想要使用C ++,QT是跨平台应用的最简单的方法,我发现自己在需要UI时使用QT,即使QT有一大堆库,几乎可以做到一切在C ++中更容易。

如果您不想使用QT,那么您需要一个好的设计和大量的抽象来进行跨平台应用。

然而,对于中型应用程序,我正在使用越来越多的Python bindinq到QT。 如果你正在使用一个控制台应用程序并且你知道一些python,你可能会发现Python脚本比C ++更舒服。它可以节省时间,以便能够专注于您的应用程序。

答案 6 :(得分:2)

我还建议Github electron允许使用NodeJ和Google的Chromium构建跨平台桌面应用程序。这种方法的唯一缺点是,由于Javascript和本机C ++之间的抽象层,电子应用程序运行速度比本机C ++应用程序慢得多。