二进制兼容性:

 

Bionic 不与GNU C库,ucLibc,或任何已知的Linux C库相兼容。这意味一下几件事情:

- 你不能指望依赖GNU C库头文件编译出来的东东,能够正常地动态链接到Bionic.

- 你应该*确实地*依赖Bionic并且使用Android工具链来编译你的程序,工具链处理一些至关重要的细节问题,让你的程序能正常运行。

如果不这样做,经常会导致无法运行或者链接,甚至运行崩溃。互联网上有些网页也描述了怎样使用ARM GNU 工具链成功地写一个"hello-world"程序。这些示例有时也会正常运行,如果不是情非得以,你不应该按照那些指令去做,除非你想浪费时间。

注意,不管怎样,你*能够*依赖GNU C库头文件并且通过静态链接的方式生成一个程序。相应的程序应该能够运行。(如果你不使用dlopen()/dlsym()的话)

动态链接器:


Bionic有它自己的动态链接器(就像在Linux中的ld.so一样),这个链接器不支持由其他GCC ARM工具链生成的重定位。

C++异常支持:

目前,Bionic不支持C++异常,这意味着下面的事实:

- 如果在pthread_once()的回调函数中抛出异常,C库将保持对应的pthread_once_t互斥器的锁定状态。再次调用pthread_once()将导致死锁。

- 一个适当的实现是能够在回调之前注册一个C++异常清理器,以便正确地为pthread_once_t解锁。不幸地是这需要高度依赖编译器的汇编代码。


这个特性在最近不会得到支持。

- 如果你从C库的回调函数中抛出异常,会发生同样的问题。幸运地是,这些情况非常少,但是你向C库的提供的回调不应抛出异常。

- Bionic缺乏一些能让异常正常运行的支持函数。

System V IPCs:


Bionic有意不提供System-V IPCs机制的支持,象由semget(), shmget(), msgget()提供的那些。原因是为了避免”拒绝服务”.想要了解这个详细的理由,请阅读文档docs/SYSV-IPCS.TXT.

包含路径:

Android编译系统会自动提供必要的C库头文件的包含路径。然而,如果你想要亲自动手的话,必须要添加:

libc/arch-$ARCH/include

libc/include

libc/kernel/common

libc/kernel/arch-$ARCH

到C代码的包含路径。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 angledark0123 的頭像
    angledark0123

    CONY的世界

    angledark0123 發表在 痞客邦 留言(0) 人氣()