Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 知道嵌入式系统使用的是glibc还是仿生?_Android_Embedded Linux_Glibc_Bionic - Fatal编程技术网

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

Android 知道嵌入式系统使用的是glibc还是仿生?,android,embedded-linux,glibc,bionic,Android,Embedded Linux,Glibc,Bionic,例如,android使用的是仿生而不是glibc,但如何确定它真正使用的是仿生而不是glibc 我可以在/proc文件系统中找到这些信息吗,或者是否有任何命令可以告诉当前系统上使用了bionic 顺便问一下,在嵌入式系统上是否可能有多个c库?如果您的代码需要根据其是与Bionic还是Glibc链接而采取不同的行为,那么这可以而且必须在编译时确定。Bionic和Glibc无论如何都不是二进制兼容的,所以您需要在编译时提交一组头文件 #if __BIONIC__ /* Bionic-specific

例如,android使用的是仿生而不是glibc,但如何确定它真正使用的是仿生而不是glibc

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


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

如果您的代码需要根据其是与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库的系统就是该开发人员的机器上。此外,仿生系统只在Android上使用,而且只有仿生系统在Android上使用,所以所有Android系统都有仿生系统,而其他系统没有仿生系统。非Android Linux系统有一些其他库,或者是Glibc,或者(在嵌入式系统上)一些其他libc,比如uClibc或Dietlibc。

那么如何知道is系统使用的是Glibc还是uClibc?@HugeMow
#ifdef uuuuuuuuuuu
。大多数库都有类似的功能。因此,我是否应该阅读嵌入系统中可能包含的头文件,以了解它使用的是哪种clib?但您是否可以在非Android Linux系统上使用Bionic?@vivekian2是的,这是可能的。我不知道有人这样做。如果每个应用程序都与它的libc静态链接,那么不同的libc可能被不同的应用程序使用。如何将应用程序静态链接到它的c库?对于gcc,在链接时使用
-static
选项。使用实用工具
文件
告诉您可执行文件是静态链接还是动态链接的。我使用
strings
列出动态链接的可执行文件使用的库和入口点。
strace
将仅显示已对库文件执行了打开/mmap/close文件操作。您必须在目标板上运行该命令。所以
strings
不是打字错误。