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

4
据我所知,人们可以使用C/C++编写Android和iOS应用程序,而不是Java和Objective-C。
由于C和C++都依赖于它们的标准库,因此C/C++标准库在这些操作系统中是如何实现的呢?它是否是像Android NDK这样的更大的东西的一部分?如果不是,我是否可以在需要时使用其他实现?

1
它可能随编译器一起提供。就像iOS的Xcode一样。 - Bo Persson
2
这些库附带了NDK C/C++工具链,并且很可能被打包到生成的.apk文件中。包含了多个C++标准库的实现,您可以从中进行选择。 - HolyBlackCat
3
C和C++库是两个不同的东西。C运行时库是任何Linux发行版的一部分,因此安卓系统必须具备它。我想,iOS也是一样的,因为它在本质上是Unix系统。C++是另一回事,可能需要作为.apk文件中单独的库存在。 - SergeyA
2
阅读:https://developer.android.com/ndk/guides/cpp-support.html - Richard Critten
@SergeyA 你似乎有些困惑。CRT和C库是两个不同的东西。你有不同的C库,比如glibc、uClibc和newlib,它们是平台无关的。CRT是平台相关的。这将是由编译器提供的内核和文件的组合(参见crt0.o等)。这并不意味着它是Linux/Unix特定的,也不意味着Androis/iOS被迫使用相同的CRT/C库。 - user9163035
显示剩余2条评论
1个回答

7

这里涉及到几个概念,我会尽量简短地解释。Android使用Bionic作为其C库。它还列出了不同的C++库,但是他们建议您坚持使用libc++(Clang),因为他们已经停止支持libstdc++(也就是他们称之为gnustl的内容),而STLPort则过时了。现在即使他们将libstdc++称为系统运行时,在libstdc++特别是支持库实际上被称为libsupc++。为了有异常和RTTI支持,您需要实现/构建这一点,但在Android中似乎并非如此。

对于苹果来说,情况有所不同。XCode是IDE(而不是编译器!)。在旧版本的Mac上,他们提供了一个古老的GCC版本。在过渡期间,他们使用了llvm-gcc并将gcc符号链接到clang。现在最新版本的XCode仅支持LLVM/Clang。默认情况下,Mac使用libc++,但如果您喜欢,可以选择libstdc++。请记住,尽管Clang试图尽可能与GCC ABI兼容,但混合由libc++/libstdc++编译的库可能不明智。
你能在你的工具链中使用不同的C库吗?不容易。您需要将选择的C库(例如Newlib)移植到该平台,这并不容易。此外,您还需要构建一个交叉编译器工具链,不仅针对该系统,而且还使用新库。您必须查找已经为您完成此操作的人。

即使很容易,也没有好的理由这样做。通常情况下,您只想交换库的某些部分,例如 malloc。例如,Android 可以使用 jemalloc


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接