2012-08-26 14 views
5

na przykład Android używa raczej bionic niż glibc, ale jak się domyślić, że naprawdę używa bionic http://en.wikipedia.org/wiki/Bionic_(software), a nie glibc?Czy system osadzony używa glibc lub bionika?

mogę znaleźć tej informacji w/proc system plików, czy jest jakaś komenda która może powiedzieć Bionic jest używany na obecnym systemie?

przy okazji, czy możliwe jest posiadanie więcej niż jednej biblioteki c na osadzonych systemach?

+1

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

+0

jak połączyć aplikację statycznie z jej biblioteką c? – hugemeow

+2

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

Odpowiedz

4

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.

+0

, a następnie jak sprawdzić, czy system używa glibc lub uClibc? – hugemeow

+0

@ hugemeow '#ifdef __UCLIBC__'. Większość bibliotek ma coś takiego. – Gilles

+0

więc powinienem przeczytać pliki głowic, które mogą być zawarte w osadzonym systemie, aby wiedzieć, którego clib używa? – hugemeow

Powiązane problemy