据我所知,人们可以使用C/C++编写Android和iOS应用程序,而不是Java和Objective-C。
由于C和C++都依赖于它们的标准库,因此C/C++标准库在这些操作系统中是如何实现的呢?它是否是像Android NDK这样的更大的东西的一部分?如果不是,我是否可以在需要时使用其他实现?
由于C和C++都依赖于它们的标准库,因此C/C++标准库在这些操作系统中是如何实现的呢?它是否是像Android NDK这样的更大的东西的一部分?如果不是,我是否可以在需要时使用其他实现?
这里涉及到几个概念,我会尽量简短地解释。Android使用Bionic作为其C库。它还列出了不同的C++库,但是他们建议您坚持使用libc++(Clang),因为他们已经停止支持libstdc++(也就是他们称之为gnustl的内容),而STLPort则过时了。现在即使他们将libstdc++
称为系统运行时,在libstdc++
特别是支持库实际上被称为libsupc++。为了有异常和RTTI支持,您需要实现/构建这一点,但在Android中似乎并非如此。
llvm-gcc
并将gcc
符号链接到clang
。现在最新版本的XCode仅支持LLVM/Clang。默认情况下,Mac使用libc++,但如果您喜欢,可以选择libstdc++。请记住,尽管Clang试图尽可能与GCC ABI兼容,但混合由libc++/libstdc++编译的库可能不明智。即使很容易,也没有好的理由这样做。通常情况下,您只想交换库的某些部分,例如 malloc
。例如,Android 可以使用 jemalloc。
crt0.o
等)。这并不意味着它是Linux/Unix特定的,也不意味着Androis/iOS被迫使用相同的CRT/C库。 - user9163035