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

<

div id=”content” contentScore=”3378″>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<br> <br>|-- libdl      (动态链接库访问接口 dlopen dlsym dlerrordlclose dladdr的实现)<br> <br>|  |-- Android.mk<br> <br>|  |-- arch-sh<br> <br>|  |-- dltest.c<br> <br>|  |-- libdl.c<br> <br>|  |--MODULE_LICENSE_BSD<br> <br>| — 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<br> <br>|-- libstdc++  (standard c++ lib)<br> <br>|  |-- Android.mk<br> <br>|  |-- include<br> <br>|  |--MODULE_LICENSE_BSD<br> <br>|  |-- NOTICE<br> <br>| — src
 
|– libthread_db (线程调试库,可以利用此库对多线程程序进行调试)
 
|  |– Android.mk
 
|  |– include
 
|  |–libthread_db.c
 
|  |–MODULE_LICENSE_BSD
 
-- NOTICE<br> <br>|-- linker (Androiddynamic linker)<br> <br>|  |-- Android.mk<br> <br>|  |-- arch<br> <br>|  |-- ba.c<br> <br>|  |-- ba.h<br> <br>|  |-- debugger.c<br> <br>|  |-- dlfcn.c<br> <br>|  |-- linker.c<br> <br>|  |--linker_debug.h<br> <br>|  |--linker_format.c<br> <br>|  |--linker_format.h<br> <br>|  |-- linker.h<br> <br>|  |-- MODULE_LICENSE_APACHE2<br> <br>|  |-- NOTICE<br> <br>|  |-- README.TXT<br> <br>| — rt.c
 
|– MAINTAINERS

更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11</sp