标准 C++ 库的跨平台程度如何?

Posted

技术标签:

【中文标题】标准 C++ 库的跨平台程度如何?【英文标题】:How cross platform is the standard C++ library? 【发布时间】:2013-06-28 13:04:48 【问题描述】:

C++ 标准库(例如 std::string 流)是否可用于 iosandroid(使用 JNI/NDK)?如果是这样:

支持到什么程度? 如何处理控制台等桌面特定功能? 它有多快/可靠? 它还有多少其他移动平台可用? 移植到移动平台(如 iOS)时,我可以指望不必使用 std 库修改太多代码吗?

【问题讨论】:

我不熟悉这些平台,但标准库应该在所有有 C++ 编译器的平台上都可用。 【参考方案1】:

C++ 标准库在两者上都可用。此外,iOS 拥有 C++11 已有一段时间了。

这两个平台(基本上都是基于 POSIX)都有控制台 IO 的概念,但都没有在用户界面中提供对它的访问,而且您(至少开箱即用)也不能直接运行控制台应用程序。

因此,很明显您不能使用控制台 IO 与您的应用程序进行任何类型的用户交互 - 除非您使用平台的用户界面 API 构建它。

就可移植性而言,这两个平台上都不应该有任何问题 - 它是 Android 上的 GNU Std G++ 库和 iOS 上的 Clang C++ 库。可移植性在 iOS 上不是问题,但您可能会喜欢为 Android 构建 JNI 绑定。

但实际上,您只能使用 C++ 构建应用程序的后端。所有的用户界面都明显是不可移植的,并且通常需要用 UI 框架的语言来实现。

Windows Phone 8 允许原生应用程序,而 C++ 似乎是实现它们的首选语言。BlackBerry OS 10 从根本上说是 QNX,它也符合 POSIX。

【讨论】:

“但实际上,您只能使用 C++ 构建应用程序的后端。” - 你是对的:我正在开发一个跨平台游戏引擎,即使 C++ 可以在许多平台上编译,我仍然必须为我编写的每个平台编写一段平台代码,例如对于 iOS,我正在编写一堆 Objective-C 代码作为我的 C++ 的包装器。【参考方案2】:

据我所知,标准库应该在所有平台上都是标准的。现在,它们的内部实现可能会或将会有所不同,但它们应该执行引入它们的任务。

通常标准库非常高效、快速且经过良好测试,因此应该是可靠的。

实际的问题是标准库应该包含在 C++ 实现中,但是否包含标准库完全取决于实现 C++ 的供应商。 即使它们不包含标准库,您也很有可能找到该平台的替代实现。然后,您所要做的就是将该库与您的代码链接起来。

假设有一个支持主要功能的 C++ 编译器。

即使这不可能,您也可以始终将所需的 std 函数作为自定义库移植到该特定平台。

希望这会有所帮助,

【讨论】:

以上是关于标准 C++ 库的跨平台程度如何?的主要内容,如果未能解决你的问题,请参考以下文章

boost 在c++中是啥用

VS2015编译boost1.62

VS2008下直接安装使用Boost库1 46 1版本

浅谈Windows平台下C++调用静态链接库的方式

浅谈Windows平台下C++调用静态链接库的方式

boost::asio基本使用