本资源为arm-linux下的海思编译链工具V300
C语言有三种标准库如下:
1.Glibc
glibc = GNU C Library
是GNU项(GNU Project)目,所实现的 C语言标准库(C standard library)。
目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。
其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。
2.uClibc
一个小型的C语言标准库,主要用于嵌入式。
其最开始设计用于uClinux(注:uClinux不支持MMU),因此比较适用于微处理器中。
对应的,此处的u意思是μ,Micro,微小的意思。
uClibc的特点:
(1)uClibc比glibc要小很多。
(2)uClibc是独立的,为了应用于嵌入式系统中,完全重新实现出来的。和glibc在源码结构和二进制上,都不兼容。
3.EGLIBC
EGLIBC = Embedded GLIBC
EGLIBC是,(后来)glibc的原创作组织FSF所(新)推出的,glibc的一种变体,目的在于将glibc用于嵌入式系统。
EGLIBC的目标是:
(1)保持源码和二进制级别的兼容于Glibc
源代码架构和ABI层面兼容
如果真正实现了这个目标,那意味着,你之前用glibc编译的程序,可以直接用eglibc替换,而不需要重新编译。
这样就可以复用之前的很多的程序了。
(2)降低(内存)资源占用/消耗
(3)使更多的模块为可配置的(以实现按需裁剪不需要的模块)
(4)提高对于交叉编译(cross-compilation)和交叉测试(cross-testing)的支持
【目前了解到的海思交叉编译工具链的应用环境】
arm-hisiv100-linux为基于uclibc的工具链,arm-hisiv200-linux 为基于 glibc 的工具链;
arm-hisiv300-linux为基于uclibc的工具链,arm-hisiv400-linux 为基于 glibc 的工具链;
arm-hisiv500-linux为基于uclibc的工具链,arm-hisiv600-linux 为基于 glibc 的工具链。
(在开发的时候,你编译内核所用的交叉编译链跟用户的应用程序所用的交叉编译链一定需要相同,不然没法调用系统内核的依赖库)
其中eglibc这种很容易被人开发者忽视,从而选错了编译工具链。
uClibc和Glibc并不相同,两者有许多不同之处,有可能给你带来一些问题。
1