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

时间:2018-01-02 21:16:04

标签: android c++ ios c

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

由于C和C ++都依赖于他们的标准库,在这种操作系统中C / C ++标准库的实现位置和方式是什么?它是更大的东西的一部分,例如Android NDK?如果不是,我可以根据需要使用不同的实现吗?

1 个答案:

答案 0 :(得分:5)

这里有几个概念,我将尽量保持简洁。 Android使用Bionic作为其C库。它还列出了different C++ libraries,但是,他们建议你坚持使用libc ++(Clang),因为他们已经停止支持libstdc ++(他们称之为gnustl),而STLPort是古老的。现在即使他们调用libstdc++系统运行时,特别是libstdc++,支持库实际上被称为libsupc++。为了获得异常和RTTI支持,您需要实现/构建它,这似乎不是Android的情况。

对于Apple来说,这是一个不同的故事。 XCode是IDE(不是编译器!)在旧版本的Mac上,他们发布了一个古老版本的GCC。有一个过渡期,他们使用llvm-gcc和符号链接gccclang。现在最新版本的XCode仅支持LLVM / Clang。默认情况下,Mac使用libc ++,但如果您愿意,可以选择libstdc ++。请记住,虽然Clang试图尽可能与GCC兼容ABI,但混合libc ++ / libstdc ++编译的库可能并不明智。

您可以在工具链中使用不同的C库吗?不容易。您需要将选择的C库(即Newlib)移植到平台上,这并非易事。此外,您需要构建一个交叉编译器工具链,不仅可以定位该系统,还可以使用新库。你将不得不调查已经为你做过这件事的人。

现在即使很容易,也没有充分的理由。通常情况下,您只想换出库的选择性部分,例如malloc。例如,Android可以使用jemalloc