2012-08-26 14 views
5

per esempio Android sta usando bionico piuttosto che glibc, ma come capire che usa davvero il bionico http://en.wikipedia.org/wiki/Bionic_(software), non glibc?Sapere se un sistema integrato sta usando glibc o bionic?

posso trovare queste informazioni nel filesystem/proc, o c'è qualche comando che può dire che bionic è usato sul sistema corrente?

a proposito, è possibile avere più di una lib di c su sistemi incorporati?

+1

Se ogni programma applicativo è stato collegato in modo statico alla sua libc, allora diverse libbie potrebbero essere utilizzate da diverse applicazioni. – sawdust

+0

come collegare l'applicazione staticamente alla sua libreria c? – hugemeow

+2

Per gcc usare l'opzione '-static' quando si collega. Usa l'utility 'file' per dirti se l'eseguibile è statico o collegato in modo dinamico. Io uso 'stringhe' per elencare le librerie e i punti di ingresso usati da un eseguibile collegato dinamicamente. – sawdust

risposta

4

Se si dispone di codice che deve comportarsi in modo diverso a seconda che sia collegato con Bionic o Glibc, questo può e deve essere determinato in fase di compilazione. Bionic e Glibc non sono comunque compatibili in formato binario, quindi è necessario eseguire il commit su un set di intestazioni in fase di compilazione.

#if __BIONIC__ 
/* Bionic-specific code */  
#elif __GLIBC__ 
/* Glibc-specific code */ 
#else 
#error "This C library is not supported" 
#endif 

Non troverete tutte le informazioni in /proc perché /proc contiene informazioni riguardanti il ​​kernel, non circa la libreria C.

In teoria, è possibile inserire tutte le librerie C su un sistema come desiderato. Tuttavia questo sarebbe molto insolito su un sistema embedded poiché questi in genere cercano di mantenere le dimensioni del codice verso il basso. L'unico sistema in cui mi aspetterei che siano presenti più librerie C si trova su una macchina di sviluppo incorporata, se tale sviluppo non avviene per la compilazione incrociata (il che è raro in primo luogo). Inoltre, Bionic viene utilizzato solo su Android e solo Bionic viene utilizzato su Android, quindi tutti i sistemi Android hanno Bionic e altri sistemi non hanno Bionic. I sistemi Linux non Android hanno qualche altra libreria, sia Glibc che (su sistemi embedded) qualche altra libc come uClibc o Dietlibc.

+0

allora come sapere se il sistema sta usando glibc o uClibc? – hugemeow

+0

@hugemeow '#ifdef __UCLIBC__'. La maggior parte delle biblioteche ha qualcosa del genere. – Gilles

+0

quindi dovrei leggere i file head che possono essere inclusi nel sistema embeded per sapere quale clib usa? – hugemeow

Problemi correlati