android - Android 和 iOS 中的 C/C++ 标准库在哪里?

标签 android c++ ios c

据我所知,可以使用 C/C++ 而不是 Java 和 Objective-C 在 Android 和 iOS 上编写应用程序。

既然 C 和 C++ 都依赖于它们的标准库,那么在这些操作系统中,C/C++ 标准库在何处以及如何实现?它是更大的东西的一部分吗? Android NDK?如果不是,我可以根据需要使用不同的实现吗?

最佳答案

这里有几个概念在起作用,我将尽量保持简短。安卓使用Bionic作为它的 C 库。它还列出了 different C++ libraries但是,他们建议您坚持使用 libc++ (Clang),因为他们已经停止支持 libstdc++(他们称之为 gnuSTL)并且 STLPort 很古老。现在,即使他们将 libstdc++ 称为系统运行时,特别是对于 libstdc++,支持库实际上被称为 libsupc++ .为了获得异常和 RTTI 支持,您需要实现/构建它,Android 似乎并非如此。

对于 Apple,情况就不同了。 XCode 是 IDE(不是编译器!)在旧版本的 Mac 上,他们提供了一个古老版本的 GCC。有一个过渡期,他们使用 llvm-gcc 并将 gcc 符号链接(symbolic link)到 clang。现在最新版本的 XCode 只支持 LLVM/Clang。默认情况下,Mac 使用 libc++,但您可以根据需要选择 libstdc++。请记住,虽然 Clang 试图尽可能与 GCC 兼容,但混合使用 libc++/libstdc++ 编译的库可能并不明智。

您能否在您的工具链中使用不同的 C 库?不容易。您需要将选择的 C 库(即 Newlib)移植到平台,这不是微不足道的。此外,您需要构建一个交叉编译器工具链,它不仅针对该系统而且还使用新库。您将不得不调查已经为您完成此操作的人。

现在即使这很容易,也没有充分的理由这样做。通常情况下,您只想交换库中的选定部分,例如 malloc。 Android 尤其可以使用 jemalloc例如。

关于android - Android 和 iOS 中的 C/C++ 标准库在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48067940/

相关文章:

java - 使用短信验证的 Firebase 身份验证无法正常工作

android - 将 BitmapDrawable 转换为位图

java - MediaRecorder 不保存文件

c++ - 将 RAII 与字符指针一起使用

c++ - float 的全局格式化选项

c++ - 在递归函数中创建 std::list of value 而不是 std::list of pointers

ios - 在 GameScene 和 ViewController 之间移动 Swift

android - 如何使用共享元素转换来缩放 TextView ?

ios - 在 iOS 应用程序中报告事件的最佳实践

ios - 在 Mantle 中替换 JSON 空值