Andorid中C/C++调用Bionic库问题

2014-11-24 09:48:23 · 作者: · 浏览: 0

Andorid中C/C++调用Bionic库问题


Bionic是Android的C/C++ library, libc是GNU/Linux以及其他类Unix系统的基础函数库,最常用的就是GNU的libc,也叫glibc。Android之所以采用bionic而不是glibc,有几个原因:

1、版权问题,因为glibc是LGPL

2、库的体积和速度,bionic要比glibc小很多。

3、提供了一些Android特定的函数,getprop LOGI等



由于这个是基础library,因此在开发中(特别是底层开发中),不可避免要调用到这个库中的一些方法。在使用这些方法的时候,要引用包含这些方法的头文件,添加路径如下:


外部引用bionic头文件

Include Paths:

The Androidbuild system should automatically provide the necessary include

paths requiredto build against the C library headers. However, if you want

to do thatyourself, you will need to add:

libc/arch-$ARCH/include

libc/include

libc/kernel/common

libc/kernel/arch-$ARCH

to your Cinclude path.

这些就是android系统中使用的标C头文件所在处

-------------

bionic主要目录结构及主要功能如下:

|-- Android.mk

|-- CleanSpec.mk

|-- libc (c 库)

| |-- Android.mk

| |-- arch-arm (arm构架相关的实现,主要是针对arm的优化,以及和处理器相关的调用)

| |-- arch-sh (ST公司的SH4体系实现)

| |-- arch-x86 (x86架构相关的实现)

| |-- arch-mips(mips架构相关的实现)

| |-- bionic

| |-- CAVEATS

| |-- docs

| |-- include

| |-- inet

| |-- Jamfile

| |-- kernel

| |--MODULE_LICENSE_BSD

| |-- netbsd

| |-- NOTICE

| |-- private

| |-- README

| |-- regex

| |-- stdio

| |-- stdlib

| |-- string

| |--SYSCALLS.TXT

| |-- tools

| |-- tzcode

| |-- unistd

| |-- wchar

| `-- zoneinfo

|-- libdl (动态链接库访问接口 dlopen dlsym dlerrordlclose dladdr的实现)

| |-- Android.mk

| |-- arch-sh

| |-- dltest.c

| |-- libdl.c

| |--MODULE_LICENSE_BSD

| `-- NOTICE

|-- libm (C数学函数库,提供了常见的数序函数和浮点运算)

| |-- alpha

| |-- amd64

| |-- Android.mk

| |-- arm

| |-- bsdsrc

| |--fpclassify.c

| |-- i386

| |-- i387

| |-- ia64

| |-- include

| |-- isinf.c

| |--Makefile-orig

| |-- man

| |--MODULE_LICENSE_BSD_LIKE

| |-- NOTICE

| |-- powerpc

| |-- sh

| |-- sincos.c

| |-- sparc64

| `-- src

|-- libstdc++ (standard c++ lib)

| |-- Android.mk

| |-- include

| |--MODULE_LICENSE_BSD

| |-- NOTICE

| `-- src

|-- libthread_db (线程调试库,可以利用此库对多线程程序进行调试)

| |-- Android.mk

| |-- include

| |--libthread_db.c

| |--MODULE_LICENSE_BSD

| `-- NOTICE

|-- linker (Androiddynamic linker)

| |-- Android.mk

| |-- arch

| |-- ba.c

| |-- ba.h

| |-- debugger.c

| |-- dlfcn.c

| |-- linker.c

| |--linker_debug.h

| |--linker_format.c

| |--linker_format.h

| |-- linker.h

| |-- MODULE_LICENSE_APACHE2

| |-- NOTICE

| |-- README.TXT

| `-- rt.c

|-- MAINTAINERS