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.
Se ogni programma applicativo è stato collegato in modo statico alla sua libc, allora diverse libbie potrebbero essere utilizzate da diverse applicazioni. – sawdust
come collegare l'applicazione staticamente alla sua libreria c? – hugemeow
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