知道嵌入式系统是使用glibc还是仿生?

hug*_*eow 5 android glibc embedded-linux bionic

例如android正在使用仿生而不是glibc,但如何弄清楚它真的是使用仿生http://en.wikipedia.org/wiki/Bionic_(software),而不是glibc?

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

顺便说一句,嵌入式系统可能有多个c lib吗?

Gil*_*il' 4

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

#if __BIONIC__
/* Bionic-specific code */    
#elif __GLIBC__
/* Glibc-specific code */
#else
#error "This C library is not supported"
#endif
Run Code Online (Sandbox Code Playgroud)

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

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