Android bionic和GNU glibc

271 篇文章 414 订阅
文章讨论了Android操作系统使用Bionic作为C库,而非标准的GNUGLIBC。Bionic是为资源有限的设备设计的,导致与标准Linux应用的不兼容。AndroidNDK允许开发者为Bionic交叉编译库,但并非所有库都能适应。TEE系统如Optee不支持libc,而是使用自定义的libutee,开发者需关注GPAPI支持而非C库。
摘要由CSDN通过智能技术生成

在这里插入图片描述

Android bionic和GNU glibc

安卓运行的是bionic而非glibc。Bionic是标准C库的实现,由谷歌为其Android操作系统开发。它与GNU C库(glibc)(运行在标准linux发行版上)的不同之处在于,它是为内存和处理器能力低于典型linux系统的设备设计的。android也不包括你在典型的Linux发行版上找到的所有GNU库。它也不包括像Xorg这样的X服务器,所以您不能运行标准的图形Linux应用程序。

这意味着所有为标准linux编译的库都不能与android一起使用,除非你将它们与android NDK交叉编译以使用bionic。这似乎已经有很多工作要做了,而且根本不能保证openpilot使用的所有库都可以使用arm架构的bionic 进行编译。问题不在于arm体系结构,它得到了广泛的支持,标准x86-linux发行版上几乎所有可用的库也可用于arm。主要问题是bionic。几乎没有一个库是基于bionic预编译的。

总结

libc 是一个标准。GNU C(glibc)是基于libc标准的一个实现,然后GNU编译工具链中默认基础这种glibc库,所以当你使用window编译C语言、Ubuntu编译C语言、交叉编译器编译C语言的时候,默认会链接glibc库。所以你能够跨多个平台使用printf、fopen之类的函数。

bionic也是基于libc标准的一个实现,它不在GNU这样的编译工具链中,它是Google专门为android基于libc重新的一个实现。它在android NDK编译工具链中。

在ubuntu、window图像界面的系统中,底层是Linux Kernel或其它内核,内核中支持libc,所以上层就支持glibc,也能支持bionic。
然而在ubuntu、window图像界面的系统中,在上层有很多其它各种各样的库的,这些库会依赖glibc。所以你就无法把ubuntu、window的一些上层应用移植到Android上

对于TEE系统,你肯定是十分好奇,它支持glibc吗?他支持libc吗?如何支持?
由于tee内核是不支持libc的,所以上层你就无法去支持glibc或bionic。
例如optee,虽然不支持libc,但他独创了一种,它支持libutee。但这一块并没有标准,每家TEE都需要独自实现自己的C库。
不过还好了,在TEE的开发概念中,不必关心C库的支持情况,只需关心是否支持GP API。

代码导读:

GNU glibc
Android bionic
libutee

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值