【问题标题】:Can a desktop app be developed in C++ that would work on both Windows and Mac OS?可以在 Windows 和 Mac OS 上使用 C++ 开发桌面应用程序吗?
【发布时间】:2011-06-16 10:30:24
【问题描述】:

我正在努力节省一些钱并开发一个可以在 Windows 和 Mac OS 上运行的桌面应用程序。这可能吗?我们是否可以在 C++ 中完成它,然后通过一些修复和调整,仍然在两个操作系统上重用同一个应用程序?

【问题讨论】:

  • 除非这是类似命令的工具;总的来说,这是一个坏主意。当您尝试使用 Java 或 Qt 等创建“便携式”应用程序时,您通常会得到一个看起来既不像 Mac 应用程序也不像 Windows 应用程序的怪物;并且充其量通常感觉使用起来很笨拙。
  • @Williham,我不了解 Mac,但我已经为 Windows/Linux 做过它,它在两个系统中看起来都很好。哦,在 HP-UX 中也是如此。这适用于 Qt 和 Java。 Mac 有那么不同吗?
  • 鉴于既定目标(节省一些钱),用户界面的非本地性可能是一个可以接受的折衷方案。此外,表单经验我知道,一旦(便携式)功能起作用,Qt 将允许您稍后添加本机润色。
  • @Sergey Tachenov:Mac OS X 在外观和感觉方面通常与那些完全不同。特别是在文档处理和应用程序架构方面。也可能是上述操作系统的应用程序普遍缺乏一致性有助于掩盖问题。
  • 在 Mac OS X 上,最好的 Qt 可以很好地模拟原生应用程序的外观,但即使是最好的 Qt 端口也会在某些方面出现错误行为。诸如不支持标准键盘快捷键或在关闭最后一个窗口时退出应用程序或具有非标准菜单结构之类的事情总是会放弃非本机应用程序。

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


【解决方案1】:

是的,这是可能的。由于操作系统不同,部分代码可能会有所不同。

  • 您应该使用一个通用的 GUI 库,例如 Qt:http://qt.nokia.com/
    值得注意的是,Qt 带来了更多的跨平台功能,因此请熟悉它。
  • 会有一些差异需要处理,例如
    • 文件路径(C: Mac 上不存在,\ 和 / 是路径分隔符等)
    • 文件结尾不同(Windows 中的 CrLf,Mac 中的 Lf)
  • 您需要编译到两个不同的目标 CPU。大多数 C++ 编译器都可以做到这一点。
  • 可以对两者使用相同的代码,您只需根据编译器所针对的操作系统定义要包含(或不包含)的区域。

只是谷歌一个跨操作系统开发指南,很多人以前做过。 :)

这可能无关紧要,但仍然值得注意(因为您说“省钱”),Java 和 Mono Project(.Net,Qt)都允许您编写跨平台应用程序,但底层技能有限平台。它们是高级语言,通常被认为可以节省时间(但这是一个单独的讨论。)

【讨论】:

  • Qt 将处理路径分隔符和行尾。甚至标准的 C 和 C++ 库也可以处理行尾。
【解决方案2】:

扩展我的评论:

不要

用可移植的 C++ 编写您的库代码;将尽可能多的功能放入库中,确保在学习过程中学习特定于平台的 API(可能是 Cocoa 和 .NET),因此库的接口至少适度适用于任何一种。

然后将您的库包装在本机二进制文件中;确保您注意应用程序在每个平台上的外观以及它们的感觉。

构建一个看起来像 X11 应用程序并以介于 Gnome 应用程序、KDE ​​应用程序、OS X 应用程序和 Windows 应用程序之间的方式完成所有操作的应用程序真的会损害用户体验。

很糟糕

【讨论】:

  • .Net 不是标准的 Windows API。最好将 Windows API 描述为 C、COM、.Net、WMI 的混合体,然后我可能仍然忘记了某些部分。 C++ 与前三个相当兼容。
  • @MSalters:“Windows API”几乎被普遍认为是一组 C 头文件和库。在我熟悉的任何解释下,都包括 .NET 和 WMI。以 Windows API 为目标时,您也不仅限于 C++ 开发。它适用于 C 和 C++ 与适用于 Visual Basic、.NET 平台和 Python(仅举几例)一样好。当您说“C++ 与前三个合理兼容”时,我也不知道您的意思。针对 Windows API 的 C++ 应用程序有哪些兼容性问题?
【解决方案3】:

WxWidgets

这个问题得到asked a lot,另见: this questionthis onethis one 等等。

【讨论】:

    【解决方案4】:

    这里的聚会迟到了!

    我正处于完成跨平台商业应用程序的最后阶段(目前是 OS/X 和 Windows,以后可能是 Linux 或 iOS)。

    我们正在使用一个名为 Juce 的开源跨平台 C++ 开发库,我对它的评价还不够高。它功能极其齐全,代码可靠且高质量,您显然可以从同一个代码库为 Windows、OS/X、Linux、iOS 和 Android 构建(我们只尝试了前两个,但其他开发人员正在显然报告其他平台的成功)。

    特别令人高兴的是,首席开发人员在他的公告板上非常活跃,并且对故障报告非常敏感。

    此外,您可以在 GPL 下许可该库,并且它们还具有价格非常合理的商业许可。

    Juce 在从事数字音频应用程序的人中非常受欢迎 - 事实上,据我所知,许多或可能大多数顶级商业数字音频应用程序都使用此系统 - 但它功能非常齐全且速度极快,应该被视为顶级任何跨平台开发应用程序的候选者。

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 1970-01-01
      • 2019-01-03
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多