据我所知,可以用C / C ++在Android和iOS上编写应用程序,而不是Java和Objective-C。
由于C和C ++都依赖于他们的标准库,在这种操作系统中C / C ++标准库的实现位置和方式是什么?它是更大的东西的一部分,例如Android NDK?如果不是,我可以根据需要使用不同的实现吗?
答案 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
和符号链接gcc
到clang
。现在最新版本的XCode仅支持LLVM / Clang。默认情况下,Mac使用libc ++,但如果您愿意,可以选择libstdc ++。请记住,虽然Clang试图尽可能与GCC兼容ABI,但混合libc ++ / libstdc ++编译的库可能并不明智。
您可以在工具链中使用不同的C库吗?不容易。您需要将选择的C库(即Newlib)移植到平台上,这并非易事。此外,您需要构建一个交叉编译器工具链,不仅可以定位该系统,还可以使用新库。你将不得不调查已经为你做过这件事的人。
现在即使很容易,也没有充分的理由。通常情况下,您只想换出库的选择性部分,例如malloc
。例如,Android可以使用jemalloc。