2012-08-26 15 views
5

por ejemplo, Android está utilizando biónico en lugar de glibc, pero ¿cómo averiguarlo realmente está utilizando bionic http://en.wikipedia.org/wiki/Bionic_(software), no glibc?¿Sabes si un sistema embebido usa glibc o biónico?

¿puedo encontrar esta información en el sistema de archivos/proc, o hay algún comando que indique que bionic se usa en el sistema actual?

por cierto, ¿es posible tener más de una biblioteca en sistemas embebidos?

+1

Si cada programa de aplicación estaba enlazado estáticamente con su libc, diferentes aplicaciones podrían estar utilizando libcs ​​diferentes. – sawdust

+0

cómo vincular la aplicación estáticamente a su biblioteca c? – hugemeow

+2

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

Respuesta

4

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.

+0

¿cómo saber si el sistema está utilizando glibc o uClibc? – hugemeow

+0

@hugemeow '#ifdef __UCLIBC__'. La mayoría de las bibliotecas tienen algo como esto. – Gilles

+0

entonces, ¿debería leer los archivos principales que pueden estar incluidos en el sistema embebido para saber qué clib usa? – hugemeow

Cuestiones relacionadas