【发布时间】:2011-06-03 18:57:22
【问题描述】:
如果用 c++ 编写的程序可以在 Windows 上运行,是否必须完全重写才能在 Mac OS 或移动操作系统上运行?
【问题讨论】:
如果用 c++ 编写的程序可以在 Windows 上运行,是否必须完全重写才能在 Mac OS 或移动操作系统上运行?
【问题讨论】:
C++ 是一种标准语言,这意味着您编写的源代码可以在任何实现了 C++ 标准的平台上编译。有两种方法可以编写无法在不同实现上编译的 C++ 程序。首先,如果您使用仅在特定(一组)实现上找到的语言扩展。其次,使用依赖于不随标准库提供的代码的库(例如在 OS API 上)。
首先,尽量编写标准代码。其次,使用 Boost、Qt 等跨平台库...
【讨论】:
通常,是的,因为程序将需要使用特定于操作系统的功能来进行窗口化,并且可能还需要其他功能(网络、同步等)。但是,许多程序试图通过构建包装器来尽可能地缓解这种情况类,以便大多数程序处理这些包装器而不是原始的特定于平台的工具。要将程序从一个平台移植到另一个平台,您只需使用新平台的工具重新实现包装器。
许多程序更进一步,通过使用 Qt 或 Boost 等预先编写的库来处理一些跨平台的愚蠢问题,但这(本质上)是上述更大规模的想法。
【讨论】:
这取决于。一般来说,标准 C++ 是一种通用的、可移植的语言,可以编译为在具有符合标准的编译器的任何系统或平台上运行。
但是,您可能希望添加到典型应用程序中的许多更“有趣”的功能并不是标准 C++ 的一部分。这包括 GUI、线程、套接字和低级 OS API 调用。这些通常是不可移植的,使用这些特性的部分代码需要为每个操作系统或平台单独实现。
幸运的是,这并不像听起来那么令人生畏,因为存在很多跨平台库已经经历了这样做的麻烦。例如,Boost threading library 已经为不同的平台或操作系统编写了线程代码,但所有这些都抽象在一个很好的统一 API 后面,可以在 C++ 应用程序代码中移植使用。
另外,很多非标准C++代码仍然符合一些标准,比如POSIX,跨平台支持。例如,大多数 UNIX 系统,包括 Linux 和 Mac OS X,都支持 POSIX 线程(pthread API)。
【讨论】:
如果代码本身使用所有目标平台都支持的库,那么您只需要适当的编译器即可为每个系统生成有效的二进制文件。
【讨论】:
软件可以用多种语言编写,然后链接在一起。例如,我可以用 C++(通常使用 Boost)编写我的应用程序的后端逻辑,然后用 C# 为 Windows 和 Objective-C 为 Mac 构建两个独立的前端。我可以将 C++ 和 C# 组件链接到一个平台,然后将 C++ 和 Objective-C 组件链接到另一个平台。这种方法将为每个平台提供最“原生”的外观。
作为替代方案,我可以使用 Qt 或 WxWidgets 在 C++ 中编写整个前端。这将在所有平台上运行,尽管没有 100% 平台的花里胡哨。
【讨论】: