Wenn Sie Code haben, der sich abhängig davon, ob er mit Bionic oder Glibc verknüpft ist, anders verhalten muss, kann und muss dies zur Kompilierzeit bestimmt werden. Bionic und Glibc sind sowieso nicht binärkompatibel, daher müssen Sie zur Kompilierungszeit einen Satz von Headern festlegen.
#if __BIONIC__
/* Bionic-specific code */
#elif __GLIBC__
/* Glibc-specific code */
#else
#error "This C library is not supported"
#endif
Sie werden keine Informationen in /proc
finden, weil /proc
Informationen über den Kernel enthält, nicht über die Bibliothek C.
Theoretisch ist es möglich, so viele C-Bibliotheken auf einem System zu speichern, wie Sie möchten. Dies wäre jedoch bei einem eingebetteten System sehr ungewöhnlich, da diese im Allgemeinen versuchen, die Codegröße niedrig zu halten. Das einzige System, in dem ich mehrere C-Bibliotheken erwarte, ist ein Embedded-Entwickler-Rechner, wenn dieser Entwickler kein Cross-Compiling durchführt (was selten vorkommt). Darüber hinaus wird Bionic nur auf Android verwendet und nur Bionic wird auf Android verwendet, so dass alle Android-Systeme über Bionic verfügen und andere Systeme nicht über Bionic verfügen. Nicht-Android-Linux-Systeme haben eine andere Bibliothek, entweder Glibc oder (auf eingebetteten Systemen) einige andere libc wie uClibc oder Dietlibc.
Wenn jedes Anwendungsprogramm statisch mit seiner libc verbunden war, dann könnten verschiedene libcs von verschiedenen Anwendungen verwendet werden. – sawdust
Wie verknüpfen Sie die Anwendung statisch mit ihrer c-Bibliothek? – hugemeow
Für gcc verwenden Sie die Option "-static", wenn Sie eine Verknüpfung herstellen. Verwenden Sie das Dienstprogramm 'file', um anzugeben, ob die ausführbare Datei statisch oder dynamisch verknüpft ist. Ich verwende 'strings', um die Bibliotheken und Einstiegspunkte aufzulisten, die von einer dynamisch verknüpften ausführbaren Datei verwendet werden. – sawdust