例如,安卓使用的是仿生而不是glibc,但如何确定它使用的是仿生http://en.wikipedia.org/wiki/Bionic_(software),而不是glibc?
我可以在/proc文件系统中找到这些信息吗?或者有什么命令可以告诉我当前系统上使用了bionic吗?
顺便问一下,在嵌入式系统上有可能有多个C库吗?
发布于 2012-08-27 03:06:56
如果您的代码需要根据它是与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上使用,只有Bionic在Android上使用,所以所有Android系统都有Bionic,而其他系统没有Bionic。非Android Linux系统还有一些其他的库,要么是Glibc,要么(在嵌入式系统上)是其他的libc,比如uClibc或Dietlibc。
https://stackoverflow.com/questions/12131219
复制相似问题