Si tiene un código que necesita comportarse de manera diferente dependiendo de si está vinculado con Bionic o Glibc, esto puede y debe determinarse en el momento de la compilación. Bionic y Glibc no son compatibles con binarios de todos modos, por lo que debe comprometerse con un conjunto de encabezados en tiempo de compilación.
#if __BIONIC__
/* Bionic-specific code */
#elif __GLIBC__
/* Glibc-specific code */
#else
#error "This C library is not supported"
#endif
Usted no encontrará ninguna información en /proc
porque /proc
contiene información sobre el núcleo, no se trata de la biblioteca C.
En teoría, es posible poner tantas bibliotecas C en un sistema como desee. Sin embargo, esto sería muy inusual en un sistema integrado, ya que generalmente intentan mantener el tamaño del código reducido. El único sistema en el que esperaría tener múltiples bibliotecas de C está en la máquina de un desarrollador embebido, si ese desarrollador no es de compilación cruzada (lo cual es raro en primer lugar). Además, Bionic solo se usa en Android, y solo Bionic se usa en Android, por lo que todos los sistemas Android tienen Bionic y otros sistemas no tienen Bionic. Los sistemas Linux no Android tienen alguna otra biblioteca, ya sea Glibc o (en sistemas integrados) alguna otra libc como uClibc o Dietlibc.
Si cada programa de aplicación estaba enlazado estáticamente con su libc, diferentes aplicaciones podrían estar utilizando libcs diferentes. – sawdust
cómo vincular la aplicación estáticamente a su biblioteca c? – hugemeow
Para gcc use la opción '-static' cuando enlace. Use el "archivo" de la utilidad para indicarle si el ejecutable es estático o está vinculado dinámicamente. Utilizo 'cadenas' para enumerar las bibliotecas y los puntos de entrada utilizados por un ejecutable vinculado dinámicamente. – sawdust