5

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

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

顺便说一句,嵌入式系统上是否有可能拥有多个 c lib?

4

1 回答 1

4

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

#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。

于 2012-08-26T19:06:55.820 回答