Jeśli masz kod, który musi zachowywać się różnie w zależności od tego, czy jest to związane z Bionic lub Glibc, może i musi być określona w czasie kompilacji. Bionic i Glibc nie są w żaden sposób kompatybilne z binariami, więc podczas kompilacji musisz zatwierdzić jeden zestaw nagłówków.
#if __BIONIC__
/* Bionic-specific code */
#elif __GLIBC__
/* Glibc-specific code */
#else
#error "This C library is not supported"
#endif
nie znajdziemy żadnych informacji w /proc
ponieważ /proc
zawiera informacje o jądrze, a nie o bibliotece C.
Teoretycznie możliwe jest umieszczenie tylu bibliotek C w systemie, ile chcesz. Jednak w systemie wbudowanym byłoby to bardzo nietypowe, ponieważ zazwyczaj starają się one zmniejszyć rozmiar kodu. Jedyny system, w którym oczekiwałbym wielu bibliotek C, znajduje się na osadzonej maszynie programisty, jeśli ten programista nie będzie się kompilował (co jest rzadkością w pierwszej kolejności). Ponadto Bionic jest używany tylko w systemie Android, a tylko Bionic jest używany na Androida, więc wszystkie systemy Android mają Bionic, a inne systemy nie mają Bionic. Systemy linuksowe inne niż Android posiadają inną bibliotekę, albo Glibc, albo (w systemach wbudowanych) inne biblioteki libc, takie jak uClibc lub Dietlibc.
Jeśli każdy program aplikacji był statycznie połączony z jego libc, wtedy różne biblioteki mogły być używane przez różne aplikacje. – sawdust
jak połączyć aplikację statycznie z jej biblioteką c? – hugemeow
Dla gcc użyj opcji '-static' podczas łączenia. Użyj narzędzia 'plik', aby powiedzieć, czy plik wykonywalny jest połączony statycznie lub dynamicznie. Używam 'string' do wyświetlania bibliotek i punktów wejścia używanych przez dynamicznie połączony plik wykonywalny. – sawdust