android - 知道嵌入式系统是使用 glibc 还是 bionic?

标签 android embedded-linux glibc bionic

例如 android 使用的是 bionic 而不是 glibc,但是如何弄清楚它实际上是在使用 bionic http://en.wikipedia.org/wiki/Bionic_(software) , 不是 glibc?

我可以在/proc 文件系统中找到此信息吗,或者是否有任何命令可以告诉当前系统上使用了 bionic?

顺便问一下,在嵌入式系统上有可能有多个 c 库吗?

最佳答案

如果您的代码需要根据它是与 Bionic 还是 Glibc 链接而表现不同,这可以而且必须在编译时确定。 Bionic 和 Glibc 无论如何都不是二进制兼容的,因此您需要在编译时提交一组 header 。

#if __BIONIC__
/* Bionic-specific code */    
#elif __GLIBC__
/* Glibc-specific code */
#else
#error "This C library is not supported"
#endif

您不会在 /proc 中找到任何信息,因为 /proc 包含有关内核的信息,而不是有关 C 库的信息。

理论上,可以在一个系统上放置任意多的 C 库。然而,这在嵌入式系统上是非常不寻常的,因为它们通常会尽量减少代码大小。我期望多个 C 库的唯一系统是在嵌入式开发人员的机器上,如果该开发人员恰好不​​进行交叉编译(这首先很少见)。再者,Bionic只在Android上使用,Android上也只有Bionic,所以所有Android系统都有Bionic,其他系统没有Bionic。非 Android Linux 系统有一些其他库,Glibc 或(在嵌入式系统上)一些其他 libc,例如 uClibc 或 Dietlibc。

关于android - 知道嵌入式系统是使用 glibc 还是 bionic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12131219/

相关文章:

android - 人脸检测API-坐标

gcc - 为 arm32 构建内核时对 __aeabi_ldivmod 的 undefined reference

java - Android 应用程序在 onActivityResult 方法中崩溃

java - 从 Serializable 向下转换为 LinkedList<Class>

linux - 在嵌入式 arm 机器上设置 ssh 服务器

arm - ARM 系统模式与 arm 监控模式有何不同?

c++ - 调试 glibc free() : invalid pointer

c++ - 删除对象时双重释放或损坏

c - malloc_atfork 中的死锁

java - 安卓.view.InflateException : Binary XML file line #8: Error inflating class fragment