【问题标题】:are programs coded separately for different operating systems?程序是否针对不同的操作系统分别编码?
【发布时间】:2011-06-03 18:57:22
【问题描述】:

如果用 c++ 编写的程序可以在 Windows 上运行,是否必须完全重写才能在 Mac OS 或移动操作系统上运行?

【问题讨论】:

    标签: c++ windows macos


    【解决方案1】:

    C++ 是一种标准语言,这意味着您编写的源代码可以在任何实现了 C++ 标准的平台上编译。有两种方法可以编写无法在不同实现上编译的 C++ 程序。首先,如果您使用仅在特定(一组)实现上找到的语言扩展。其次,使用依赖于不随标准库提供的代码的库(例如在 OS API 上)。

    首先,尽量编写标准代码。其次,使用 Boost、Qt 等跨平台库...

    【讨论】:

    • 那么,像visual c++这样的东西不能在mac os上运行吧?
    • @avon_verma:不一定。这取决于使用的库以及这些库是否特定于平台。例如,一个简单的基于控制台的应用程序(如 hello world)可以用 VC++ 编写并编译以在 Mac 上运行。
    【解决方案2】:

    通常,是的,因为程序将需要使用特定于操作系统的功能来进行窗口化,并且可能还需要其他功能(网络、同步等)。但是,许多程序试图通过构建包装器来尽可能地缓解这种情况类,以便大多数程序处理这些包装器而不是原始的特定于平台的工具。要将程序从一个平台移植到另一个平台,您只需使用新平台的工具重新实现包装器。

    许多程序更进一步,通过使用 Qt 或 Boost 等预先编写的库来处理一些跨平台的愚蠢问题,但这(本质上)是上述更大规模的想法。

    【讨论】:

      【解决方案3】:

      这取决于。一般来说,标准 C++ 是一种通用的、可移植的语言,可以编译为在具有符合标准的编译器的任何系统或平台上运行。

      但是,您可能希望添加到典型应用程序中的许多更“有趣”的功能并不是标准 C++ 的一部分。这包括 GUI、线程、套接字和低级 OS API 调用。这些通常是不可移植的,使用这些特性的部分代码需要为每个操作系统或平台单独实现。

      幸运的是,这并不像听起来那么令人生畏,因为存在很多跨平台库已经经历了这样做的麻烦。例如,Boost threading library 已经为不同的平台或操作系统编写了线程代码,但所有这些都抽象在一个很好的统一 API 后面,可以在 C++ 应用程序代码中移植使用。

      另外,很多非标准C++代码仍然符合一些标准,比如POSIX,跨平台支持。例如,大多数 UNIX 系统,包括 Linux 和 Mac OS X,都支持 POSIX 线程(pthread API)。

      【讨论】:

        【解决方案4】:

        如果代码本身使用所有目标平台都支持的库,那么您只需要适当的编译器即可为每个系统生成有效的二进制文件。

        【讨论】:

          【解决方案5】:

          软件可以用多种语言编写,然后链接在一起。例如,我可以用 C++(通常使用 Boost)编写我的应用程序的后端逻辑,然后用 C# 为 Windows 和 Objective-C 为 Mac 构建两个独立的前端。我可以将 C++ 和 C# 组件链接到一个平台,然后将 C++ 和 Objective-C 组件链接到另一个平台。这种方法将为每个平台提供最“原生”的外观。

          作为替代方案,我可以使用 Qt 或 WxWidgets 在 C++ 中编写整个前端。这将在所有平台上运行,尽管没有 100% 平台的花里胡哨。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-14
            • 1970-01-01
            • 2023-03-24
            • 2018-10-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多